如何使用带有img标记异常的php strip标签

时间:2014-09-29 01:04:28

标签: php html sql

你可能认为这个问题已经被问到了。但是这个问题是不同的。我想删除除<img src='smilies/smilyOne.png'><img src='smilies/smilyTwo.png'>之外的所有代码 这是我现有的代码:

$message = stripslashes(strip_tags(mysql_real_escape_string($_POST['message']), "<img>?"));

谢谢! : - )

1 个答案:

答案 0 :(得分:0)

此解决方案使用DOMDocument及其相关类来解析html,找到图像元素,然后删除那些没有正确src属性的元素。它使用简单的正则表达式来匹配src属性:

/^smilies\/smily(One|Two)\.png$/

^是字符串的开头,$是结尾; /.都是正则表达式中的特殊字符,因此使用反斜杠进行转义。 (One|Two)表示匹配OneTwo

$dom = new DOMDocument;
$dom->loadHTML($html);  // your text to be filtered is in $html

// iterate through all the img elements in $html
foreach ($dom->getElementsByTagName('img') as $img) {

    # eliminate images with no "src" attribute
    if (! $img->hasAttribute('src')) {
        $img->parentNode->removeChild($img);
    }
    # eliminate images where the src is not smilies/smily(One|Two).png
    elseif (1 !== preg_match("/^smilies\/smily(Two|One)\.png$/",
      $img->getAttribute("src"))) {
        $img->parentNode->removeChild($img);
    }
    // otherwise, the image is OK!
}
$output = $dom->saveHTML();

# now strip out anything that isn't an <img> tag
$html = strip_tags($output, "<img>");

echo "html now: $html\n\n";