如何替换图像不需要的内容

时间:2013-05-20 14:54:21

标签: php

在我的评论栏中,人们会变得棘手,他们正在使用样式来修复评论框旁边的图像。例如:

Hellow how are you? <br>
<img src="http://example.com/image/gifts/19.png" style="position: absolute; left: 150px; top: 150px;">

所以我想删除这些额外的代码。我正在尝试preg_replacestr_replace,但我没有得到任何地方。

我想要它:

Hellow how are you? <br>
<img src="http://example.com/image/gifts/19.png">

我想从中删除此样式部分。

我试试这个它也可以,但是如果我继续用大写和小写写的话会很长

PHP:

function unwant($text)
{
    $unwant = array(
       'style' => '',    
       'Style' => '',
       'STYle' => '',
       'STYLe' => '',
       'STYLE' => ''
    );
    return str_replace(array_keys($unwant), array_values($unwant), $text);
}

我想删除它:style="position: absolute; left: 150px; top: 150px;"

有更好的方法吗?

2。另一件事

如果用户仅发布图片网址

http://example.com/image/gifts/19.png

我想用

替换它
<img src="http://example.com/image/gifts/19.png">

2 个答案:

答案 0 :(得分:1)

对于第1点,你可以使用str_replace或preg_match等删除东西,或者你可以解析DOM并以那种方式处理节点

<?php

$doc = new DOMDocument();
$doc->loadHTML($html);
$images = $doc->getElementsByTagName('img');
foreach ($images as $image) {
    $image->removeAttributeNode('style');
}
$cleanHtml = $doc->saveHtml();

但是,为了安全起见,我会调查使用BBCode或Markdown作为评论,然后在代码中转换为HTML。这可以让您更好地控制您网站上的输出,同时仍然允许评论者自由地格式化他们的帖子

答案 1 :(得分:0)

使用经过验证且经过测试的 HTML白名单库,例如HTML Purifier。正则表达式不适合解析和修改HTML。