1

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

像这样的东西:

@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 变量?

提前谢谢了,

4

6 回答 6

5

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

于 2009-09-01T15:23:34.653 回答
4

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

于 2009-09-01T15:40:04.417 回答
1

我昨天问了一个关于修改和遍历 HTML 文件的好接口的问题。您可能对此感兴趣:

jQuery 移植到 PHP

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

于 2009-09-02T17:41:43.323 回答
0

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

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

于 2009-09-01T15:54:38.520 回答
-1

我认为您正在寻找的最简单的答案是执行 str_replace。

foreach ($images as $img) {
    ..my changes here..
    $body = str_replace($original_string, $modified_string, $output_body);
}
于 2009-09-01T15:28:32.443 回答
-2

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

编辑:preg_replace_callback比使用e修饰符 with更干净preg_replace,在编写我的分析器时没有想到这一点,所以混乱的答案更好。

于 2009-09-01T15:25:27.957 回答