替换HTML文本中的所有图像src标记

时间:2009-09-01 15:20:18

标签: php regex preg-match replace

我正在尝试制作一个简单的PHP脚本,以便在html文本中查找所有图像中的所有src属性,然后在进行一些条件更改后将所有找到的srcs替换为一些文本。

这样的事情:

@preg_match_all('/<img\s src="([a-zA-Z0-9\.;:\/\?&=_|\r|\n]{1,})"/isxmU', $body, $images);

现在我已将所有srcs放入$ images变量中,现在我制作:

foreach ($images as $img) {
    ..my changes here..
}

现在......我怎样才能将更改过的srcs恢复到$ body变量?

非常感谢,

6 个答案:

答案 0 :(得分:5)

您应该查看preg_replace_callback(),这将允许您使用回调函数对您喜欢的每个匹配进行后处理。 (您将使用它而不是preg_match_all(),而不是它。)

答案 1 :(得分:4)

使用HTML DOM解析器,更容易使用和维护http://simplehtmldom.sourceforge.net/

答案 2 :(得分:1)

I asked a question yesterday关于修改和遍历HTML文件的良好界面。您可能对此感兴趣:

<强> jQuery port to PHP

如果您已熟悉jQuery的API,这可能是一个不错的选择。

答案 3 :(得分:0)

如果您需要使用格式错误的HTML,那么非验证解析器可能会更好。

http://pear.php.net/package/XML_HTMLSax3

答案 4 :(得分:-1)

我认为您正在寻找的最简单的答案是做一个str_replace。

foreach ($images as $img) {
    ..my changes here..
    $body = str_replace($original_string, $modified_string, $output_body);
}

答案 5 :(得分:-2)

你想要的不是preg_replace吗?使用e修饰符时,替换文本为eval'd,因此您可以使用与要替换的文本相同的函数执行与foreach相同的操作}循环。

编辑:preg_replace_callback比使用e preg_replace修饰符更清晰,在编写我的anser时没有想到这一点,所以混乱答案更好。