PHP:从MY站点过滤除脚本和图像之外的所有代码?

时间:2011-03-28 07:55:40

标签: php regex

让我们说一位成员留下了评论。

Hi! Look at these cars.
<img src="http://www.mysite.com/possiblefolder/possiblesub/image.jpg"></img>
<img src="http://othersite.com/possiblefolder/possiblesub/image.jpg"></img>
<img src="http://www.mysite.otherside.com/possiblefolder/image.jpg"></img>
Which is your favorite?

我希望结果如下:

Hi! Look at these cars.
<img src="http://www.mysite.com/possiblefolder/possiblesub/image.jpg"></img>
http://othersite.com/possiblefolder/possiblesub/image.jpg  
http://www.mysite.otherside.com/possiblefolder/possiblesub/image.jpg  
Which is your favorite?

我想过滤除来自我网站的图片和脚本之外的所有代码。有人有任何想法吗?

5 个答案:

答案 0 :(得分:1)

在大多数合理的情况下,特别是在您的示例中,这将起作用:

$new_comment = preg_replace('%<img.*?\ssrc="(http://(?!www.mysite.com).*?)".*?>.*?</img>%', '\1', $old_comment);

它会给出你描述的结果。

答案 1 :(得分:1)

如果XHTML不合适,请通过Tidy运行。如果它已经是干净的XHTML,请跳过此部分

$config = array('output-xhtml'   => true);
$tidy = new tidy();
$html = $tidy->repareString($html, $config, 'utf8');

现在,使用干净的XHTML,您可以使用XPath:

$xhtml = new SimpleXMLElement($html);
foreach ($xhtml->xpath('//*/img') as $img_parent) {
   if(!(strpos($img_parent->img->src, 'http://www.mysite.com/') === 0)) {
     $img_parent->img = new SimpleXMLElement($img_parent->img->src);
   }
}
$cleaned_html = $xhtml->asXML();

答案 2 :(得分:1)

希望这有帮助

<(\w+).+src=[\x22|'](?![^\x22']+mysite\.com[^\x22']+)([^\x22']+)[\x22|'].*>(?:</\1>)?

第1组是使用的标签,第2组是“src”值,因此您可以进行替换。

In Browser Demo

enter image description here

答案 3 :(得分:0)

您可以使用PHP strip_tags()从用户注释中删除所有HTML标记(强烈推荐),还需要在PHPbb论坛上实现一些脚本代码,如BBCode等等。

[img]possibleimgdir/someimage.jpg[/img]

稍后搜索[img]和[/ img],在标记之间找到的内容(例如。http://www.mysite.com/possibleimgdir/someimage.jpg)附加根URL,检查文件是否存在,然后为该SRC属性创建HTML IMG标记如果它是有效的......

这只是一个可能的想法!

答案 4 :(得分:0)

你可以使用jQuery oneliner:

$('img:not(src^="http://www.mysite.com/")').hide()