在php/wordpress中使用img src交换锚点href

问题描述:

我有一个非常大的图片主题。图像包裹在我需要直接链接到文件的锚标记中。这里有一个例子图像的标记:在php/wordpress中使用img src交换锚点href

<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> 

编辑:一不留神公布没有完成写这个。

到目前为止,我有一个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设置为相同的图像(最后一个)。 所以这就是我卡住的地方。现在怎么办?

+0

您应该使用['preg_replace_callback'](http://php.net/preg_replace_callback)并处理函数/中的替换逻辑,而不是使用循环。或者使用更低效但更简单的DOM方法,更好的方法是使用'qp($ html) - > find(“img”)等'phpQuery'或'QueryPath'等。 – mario 2012-07-29 00:55:03

+0

我想到了这个,但我并不真正想我会帮你的。我需要循环,以便可以访问存储在数组中的src。虽然我可能是错的。 – user1560324 2012-07-29 01:24:51

不知道我是否在此陈述明显,但你知道它为什么将它设置为阵列中的最后一个?问题是这样的一行:

$content = preg_replace($pattern, $replacement, $content); 

每次调用它在你的循环时间,它替换所有的HREF标记为$ M的电流值[1] [$ K]。因此,在循环的每次迭代结束时,您的href都将被设置为与该循环的迭代对应的图像。因此,为什么最终结果都包含与您的循环的最后一次迭代相对应的图像。

可能的解决方案:

的preg_replace了,你可以设置为1,以确保只有1更换一个“极限”参数需要每次都放置。如果你可以让你的$ pattern与已经被替换的href不匹配,那么这应该可以解决你的问题。

如果不是,马里奥的'preg_replace_callback'解决方案应该工作。要了解如何检查要在preg_replace_callback中替换哪个实例,请参阅此问题:Can I somehow know which replacement is taking place from within a callback of preg_replace_callback?

了解到这一点,您可以访问$ m数组中的相应元素。

+0

哈哈,是的,我明白为什么最后一张图像被显示,我只是不知道该从哪里去。 preg_replace限制工作!我之前应该在手册页中看到这一点,但我显然完全掩饰了它。我最终做的是在每个锚点上设置一个属性作为一种“标志”,然后循环遍历它们,只搜索带有该标志的锚点,然后执行一次替换。再次感谢你的帮助。 – user1560324 2012-07-29 15:14:36