想要从Google Maps嵌入式iframe中提取街道地址

时间:2012-05-07 15:13:50

标签: php regex google-maps

好的,这就是我的目标。

一些背景知识:我正在对其他人构建的现有WordPress网站进行更改。他们创建了一个textarea,客户端复制并粘贴嵌入Google Map的iframe。这适用于客户在其网站上发布的属性。

困境:这一切都很好,但我正在重建其属性的详细信息页面,我想删除所有iframe信息,只留下属性地址,以便我可以使用它通过Google Maps V3 jQuery插件创建新地图。

我想转此:

<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, Ocala FL 34482

我认为我通过查看preg_replace()走在正确的轨道上,但正则表达式是我得到的。或者,如果我可以提取也有帮助的坐标。我可以使用地址或纬度和长坐标来完成工作。

提前感谢您提供的任何帮助!

使用解决方案进行编辑,因为我的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,Ocala 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 个答案:

答案 0 :(得分:1)

如果你坚持使用overkill解决方案,你首先要使用像QueryPath这样的HTML遍历库来拆分HTML并获取属性:

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

但这没有意义,实际上你应该从你的文本片段中提取URL:

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

从那里只用parse_url($url, PHP_URL_QUERY)将其拆分,然后用parse_str($qs, $vars)提取这些位,以便得到$var["q"]

但如果它是一个有点连贯的输入,你可以用q=参数创建:{/ p>

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

更懒惰的只是在整个HTML片段上使用parse_str,并且祈祷前导和尾随垃圾不会干扰所需的片段。