我正在尝试找到一个正则表达式来删除所有html特殊字符(主要是&,<,>),但保持html标签完好无损 .
我从数据库中获取这些信息,因此我无法确保将<和>之类的字符替换为&gt;和&lt;
我可以设法用PHP中的以下RegEx替换&和<它:
$Value = preg_replace('/<(?!#?\/?[a-zA-Z0-9]+>)/','',$Value);
$Value = preg_replace('/&(?!#?[a-zA-Z0-9]+;)/','&',$Value);
我现在只有修复>标签的麻烦,因为我必须使用lookup-behind,它不允许非固定长度的RegEx .
$Value = preg_replace('/(?<!<[a-zA-Z0-9]+)>/','',$Value);
有任何想法吗?
问候 - 托马斯
2 回答
使用DOM Parser并仅将替换应用于文本节点 .
只是解析部分将已经将XML特殊字符转换为它们各自的实体:
如果您不在PHP 5.3.6上,则不能将
saveHTML
与节点一起使用 . 有关解决方法,请参阅How to get innerHTML of DOMNode?和How to return outer html of DOMDocument? .如果您需要处理文本节点,则可以执行此操作
另请参阅DOMDocument in php以了解DOM的工作原理 .
我认为http://htmlpurifier.org/可以做你需要的 .
在这里查看演示:http://htmlpurifier.org/demo.php以测试它具有的选项 .