1

好的,这就是我正在做的事情。

一些背景知识:我正在对其他人构建的现有 WordPress 网站进行更改。他们创建了一个文本区域,客户可以在其中复制和粘贴一个嵌入谷歌地图的 iframe。这适用于客户在其网站上发布的属性。

困境:这一切都很好,但我正在为他们的属性重建详细信息页面,我想删除所有 iframe 信息,只留下属性地址,以便我可以使用它通过 a 创建新地图谷歌地图 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,佛罗里达州奥卡拉 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;
4

1 回答 1

1

如果您坚持使用矫枉过正的解决方案,您将首先使用像 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=使用以下方法来划分参数:

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

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

于 2012-05-07T15:56:21.377 回答