2009-09-01 78 views
1

我试图做一个简单的PHP脚本来查找HTML文本中所有图像的所有src属性,然后在做出一些条件更改后,用一些文本替换所有找到的src。替换HTML文本中的所有图像src标签

事情是这样的:

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

现在我所有索马里红新月会到$图像变量,现在我做:

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

,现在...我怎样才能恢复索马里红新月会改变到$ body变量再次?

许多在此先感谢,

回答

4

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

+0

这将工作在HTML片段或格式错误的HTML? – 2009-09-01 16:27:49

+0

它说它支持无效的HTML,我没有使用它,所以我不知道如何,我想这将是任何HTML分析器的基本要求,让我们知道你如何继续。如果你正在寻找的是一个xss过滤工具,请查看http://htmlpurifier.org/ – 2009-09-02 09:44:14

5

你应该看看preg_replace_callback(),这将允许你进行后处理每一场比赛,只要你喜欢,使用一个回调函数。 (您可以使用它来代替您的preg_match_all(),不是除此之外。)

+0

非常感谢混乱,我正在阅读preg_replace_callback()的文档,回合我无法得到它的工作。我使用此代码来测试它: 函数ReplaceImage($ match){ \t \t \t $ match [1] =“REPLACED”; \t \t \t return $ match [1]; \t \t} \t \t \t $ \t体= preg_replace_callback('/ fidoboy 2009-09-01 15:38:25

+1

好吧,'preg_replace_callback()'没有被破坏。它看起来像我的喜欢你的正则表达式是;为什么你需要一个空白元素*后跟'img'后面的空格? – chaos 2009-09-01 15:47:05

-2

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

编辑:preg_replace_callback比使用e修饰符与preg_replace更清洁,在编写我的anser时没有想到,所以混沌的答案是更好的。

+0

有时候我讨厌所以...这个问题最有回报的答案说*完全相同的东西*作为我的答案,但我得到了低估...当我写我的答案时,另一个不存在,它已发布当我写作时(你可以看到两个帖子日期之间只有两分钟的差异)。 – p4bl0 2011-04-25 22:30:58

-1

我认为你要找的最简单的答案是做一个str_replace。

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

简单,但不是最好的选择,例如如果两个original_strings是相同的,但应该用不同的东西替换(这里以前是没有图片的xyz)?或者如果一个替换字符串与页面中某个替换字符串相同? – Residuum 2009-09-01 15:45:37

+0

你是对的Residuum,多数民众赞成的问题...我需要更换完全相同的位置相同的字符串。我认为preg_replace_callback是最好的选择,但我无法得到它的工作... 任何人都可以把一个简单的示例来使用它,用一个递增的数字替换所有的img srcs吗? – fidoboy 2009-09-01 16:03:08