【发布时间】:2012-07-29 00:32:26
【问题描述】:
我有一个图像很重的 wordpress 主题。图像被包裹在我需要直接链接到文件的锚标记中。这是一个示例图像的标记:
<a href="Link_to_attachment_page" ><img src="Direct_link_to_file"></a>
我需要的是它的格式如下:
<a href="Direct_link_to_file" rel="shadowbox"><img src="Direct_link_to_file"></a>
edit: 没写完就意外发布了。
到目前为止,我有一个 preg_match_all 获取页面上每个图像的 src 并将其存储在一个数组中。像这样:
preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/si", $content, $m);
接下来我在循环中使用 preg_replace 将每个锚标记的 href 更改为数组中对应的 src:
for($k = 0; $k <$length; $k++){
$pattern ="/<a(.*?)href=('|\")(.*?).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>/i";
$replacement = '<a$1 rel="shadowbox" href="'.$m[1][$k].'"$2$3.$4$5>';
$content = preg_replace($pattern, $replacement, $content);
}
现在,成功地将 href 设置为存储在数组中的值。但是它将每个href设置为相同的图像(最后一个)。 所以这就是我卡住的地方。现在呢?
【问题讨论】:
-
您应该使用
preg_replace_callback并在函数 / 中处理替换逻辑,而不是使用循环。或者使用效率更低但更简单的 DOM 方法,更好的是phpQuery或QueryPath和qp($html)->find("a img")等。 -
我想过这个,但我真的不认为它会有所帮助。我需要循环,以便可以访问存储在数组中的 src。不过我可能错了。
标签: php regex image wordpress anchor