确保所有标签都关闭php

时间:2011-03-25 13:42:08

标签: php html

我有<textarea>我允许提交用户内容。我想允许一些标记,例如<b><i><blockquote><del>。但是,由于内容将显示在页面中,我必须确保没有未关闭的标签。

我知道我可以使用strip_tags($textarea, '<b><i><blockquote><del>'),但我怎样才能确保所有剩余的代码都已正确关闭?

3 个答案:

答案 0 :(得分:5)

您可以使用Tidy。它将清理和清理您的HTML。

这条评论在php.net上解决了你的问题,并展示了如何解决它:http://www.php.net/manual/en/tidy.examples.basic.php#89334

  

清理html片段(OO支持   现在看来似乎只有半个多了)

     

这将确保关闭所有标签,   没有添加任何html / head / body标签   在它周围。

<?php
$tidy_config = array( 
  'clean' => true, 
  'output-xhtml' => true, 
  'show-body-only' => true, 
  'wrap' => 0, 
); 

$tidy = tidy_parse_string($html_fragment, $tidy_config, 'UTF8'); 
$tidy->cleanRepair(); 
echo $tidy; 
?>

答案 1 :(得分:0)

DOMDocument扩展提供了一个用于操作HTML DOM结构的API,应该值得为此考虑。

答案 2 :(得分:0)

您确实希望使用正确的HTML过滤库,例如HTMLPurifier,尤其是因为您计划使用提交的内容来显示样式。 HTMLPurifier同时考虑属性,css和其他内联样式以避免XSS,并且还会尝试(通过使用已经建议的Tidy)来清理HTML并清除任何缺少的标记(以确保生成的片段符合XHTML)。

我认为Tidy不会尝试删除任何邪恶的XSS段。