2012-05-07 18 views
1

さて、ここで私は何をしているのですか?Googleマップの埋め込みiframeから住所を抽出したい

背景:誰か他の人が作成した既存のWordPress Webサイトに変更を加えています。クライアントがGoogle Map用の埋め込みiframeをコピーして貼り付けるテキストエリアを作成しました。これは、クライアントがWebサイトに投稿するプロパティ用です。

ジレンマ:これはすべてが順調と良いですが、私はそれらのプロパティの詳細ページを再構築していると私は、IFRAME情報のすべてを取り除くだけで、私はそれを使用できるように、プロパティのアドレスを残したいですGoogle Maps V3 jQueryプラグインを使用して新しいマップを作成します。

は、私はこれをオンにする:

5475 NW 75 AVE, Ocala FL 34482 
私は(にpreg_replaceを調べて、私は正しい軌道に乗ってだと思う

)が、正規表現をこの中へ

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361&output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361" style="color:#0000FF;text-align:left">View Larger Map</a></small> 

これが私を得るものです。あるいは、私が助けてくれる座標を抽出できるかどうか。私はアドレスか緯度と経度のどちらかを使って仕事を終わらせることができます。

私は得ることができる任意の援助のために事前に感謝!私のSOの担当者がまだ低いので、溶液で

編集:私は仕事を得ることができたマリオに

感謝。ここで私が最終的に助けてくれる人のためのコードです。

あなたがこれを開始しました:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361&output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361" style="color:#0000FF;text-align:left">View Larger Map</a></small> 

そして、あなたはこの希望:

5475 NW 75 AVE、オカラFL 34482

これは私のために働いていたものです:

// We first find and extract the 'src' from the iframe 
// $map is my original iframe embed 
// $q is our extracted and stripped text 
preg_match('#q=([^&"]+)#', $map, $match) 
and ($q = urldecode($match[1])); 

// Now you can echo out the address or use it elsewhere. 
// In my case, I am using jQuery goMap (http://www.pittss.lv/jquery/gomap) 
// and can add a new point on the map via $q 
echo $q; 
+1

ようこそスタックオーバーフロー! RegExを使ってHTMLを解析することは、[あなたを狂ってしまう]ようにしないでください(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) 。代わりに、[HTMLパーサ](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)を使用してください。 –

+0

基本的に、内側のURLの 'q ='部分を抽出したいだけですか?そう、はい、正規表現がするかもしれません。 (ここでの解析とマッチングの無意味な混乱は気にしないでください) – mario

+0

@Truth Wow、私はそれを調べなかった、ありがとう!それはかなり知的でもあるようです。私はこれを私の問題の解決策にどのように統合するのか知っていますか?私は私のコンテンツが読み込まれた後に正規表現をクリーンアップすることができると仮定していますか? – Daryn

答えて

1

あなたはやり過ぎソリューションを主張する場合は、あなたが最初にHTMLを分割し、属性を取得するために、QueryPathのようなHTMLトラバーサルライブラリを使用します。

$url = qp($html)->find("iframe")->attr("src"); 

しかし、それは無意味だと、実際にあなただけのURLを抽出しなければなりませんあなたのテキストの抜粋から:

preg_match('#http://[^"\']+#', $html, $match) 
and ($url = $match[0]); 

そこからちょうどそうあなたが$var["q"]を得るparse_url($url, PHP_URL_QUERY)でそれを分割し、parse_str($qs, $vars)とのビットを抽出。

しかし、それはあなただけでq=パラメータを切り開く可能性がややコヒーレント入力だ場合:

preg_match('#q=([^&"]+)#', $html, $match) 
and ($q = urldecode($match[1])); 

さらに怠惰なだけで全体のHTMLスニペットにparse_strを使用して、先頭と末尾のゴミんを祈ることになります目的のスニペットを妨害しない。

+0

マリオ、これは素晴らしいです。私は最初にURLを抽出することを考えていませんでした。これは、コード全体に対して正規表現を実行するよりも簡単に作業できます。私はこれと一緒に働き、報告する。ありがとう! – Daryn

+0

あなたの2番目のソリューションは、私のためにテストレベルで動作します。すべての埋め込みマップは似ているので、私のプロジェクトではうまくいくはずです。私は最終的なコードを掲示します。ご協力いただきありがとうございます。 – Daryn

関連する問題