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

Php 替换HTML文本中的所有图像src标记,php,regex,preg-match,replace,Php,Regex,Preg Match,Replace,我试图制作一个简单的php脚本,从html文本中的所有图像中查找所有src属性,然后在进行一些条件更改后,用一些文本替换所有找到的src 大概是这样的: @preg_match_all('/<img\s src="([a-zA-Z0-9\.;:\/\?&=_|\r|\n]{1,})"/isxmU', $body, $images); 现在。。。如何将更改的SRC再次恢复到$body变量 非常感谢您,您应该研究一下,这将允许您使用回调函数以任何方式对每个匹配进行后处理。(您可以使用

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

大概是这样的:

@preg_match_all('/<img\s src="([a-zA-Z0-9\.;:\/\?&=_|\r|\n]{1,})"/isxmU', $body, $images);
现在。。。如何将更改的SRC再次恢复到$body变量


非常感谢您,您应该研究一下,这将允许您使用回调函数以任何方式对每个匹配进行后处理。(您可以使用它来代替您的
preg\u match\u all()
,而不是除了它之外。)

您应该查看它,它将允许您使用回调函数以任何方式对每个匹配进行后处理。(您可以使用它来代替您的
preg\u match\u all()
,而不是除了它之外。)

您不想使用
preg\u replace
?使用
e
修饰符,替换文本为
eval
'd,因此您可以使用一个函数,对要替换的文本执行与在
foreach
循环中相同的操作


编辑:
preg\u replace\u回调
比将
e
修饰符与
preg\u replace
一起使用更干净,在编写anser时没有想到这一点,所以混沌答案更好。

您不想使用
preg\u replace
?使用
e
修饰符,替换文本为
eval
'd,因此您可以使用一个函数,对要替换的文本执行与在
foreach
循环中相同的操作


编辑:
preg\u replace\u callback
比使用
e
修饰符和
preg\u replace
更干净,在写我的答案时没有想到这一点,所以混沌答案更好。

我认为你正在寻找的最简单的答案是做str\u replace

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

我想你要找的最简单的答案是做一个stru_替换

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

改用HTML DOM解析器,更易于使用和维护

改用HTML DOM解析器,更易于使用和维护

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


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

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

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

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


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

非常感谢chaos,我现在正在阅读preg\u replace\u callback()的文档,因为我无法让它工作。我用这段代码来测试它:函数ReplaceImage($match){$match[1]=“REPLACED”;返回$match[1];}$body=preg_replace_回调('/Well,
preg_replace_回调()
没有损坏。在我看来,您的正则表达式是;为什么您需要在
img
后加空格?非常感谢chaos,我现在正在阅读preg\u replace\u callback()的文档,我无法让它工作。我正在使用此代码测试它:function ReplaceImage($match){$match[1]=“REPLACED”返回$match[1];}$body=preg_replace_回调('/Well,
preg_replace_回调()
没有损坏。在我看来,您的正则表达式是;为什么您需要在
img
后加空格?很简单,但不是最好的选择,例如,如果两个原始字符串相同,但应替换为不同的字符串(此处使用的是图像编号xyz),该怎么办?或者如果一个替换字符串与页面下方某个位置要替换的字符串相同?你是对的,这就是问题所在…我需要在同一位置替换完全相同的字符串。我认为preg_replace_回调是最好的选择,但我无法使其工作…有人能用一个简单的示例来使用它,替换所有img吗带递增数字的SRC?简单,但不是最佳选项,例如,如果两个原始_字符串相同,但应替换为不同的字符串(此处使用的是图像编号xyz),该怎么办?或者如果一个替换字符串与页面下方某个位置要替换的字符串相同?你是对的,这就是问题所在…我需要在同一位置替换完全相同的字符串。我认为preg_replace_回调是最好的选择,但我无法使其工作…有人能用一个简单的示例来使用它,替换所有img吗带递增数字的srcs?它说它支持无效的html,我没有使用过它,所以我不知道它有多好,我想这是任何html解析器的一个非常基本的要求,让我们知道你的进展情况。如果你要找的是xss过滤工具,检查它说它支持无效的html,我没有使用过它,所以我不知道如何使用它嗯,我想这是任何html解析器的一个基本要求,让我们知道你的进展。如果你想要的是xss过滤工具,请检查一下,有时我很讨厌……这个问题的最上等答案与我的答案完全相同,但我被否决了……当我写下我的答案时,另一个答案不在那里然而,它已经在我写作时发布了(你可以看到,两个发布日期之间只有两分钟的差异).有时我讨厌这样…对这个问题投了最多赞成票的答案和我的答案说的完全一样,但我被投了反对票…当我写我的答案时,另一个答案还没有出现,它已经在我写的时候发布了(你可以看到,两个发布日期之间只有两分钟的差异)。