PHP提供了解析方法以防止代码PHP / SQL注入(即mysql_real_escape_string()).对于HTML / CSS / JavaScript,情况并非如此.为什么?
第一:HTML / CSS / Javascript的唯一目的是显示信息.您可以接受HTML的某些元素或根据您的要求拒绝它们.
其次:由于HTML / CSS / JS元素数量非常多(也在不断增加),因此无法尝试控制HTML.你不能指望一个功能性的解决方案.
这就是我建议采用自上而下的解决方案的原因.我建议开始限制所有内容,然后只允许一定数量的标签.一个很好的基础可能是使用BBCdode,非常受欢迎.如果您想“解锁”BBCode之外的其他特定标签,您可以随时添加一些.
这就是BBCode类脚本在论坛和网站上流行的原因(包括堆栈溢出). WISIGIG编辑器专为管理员/内部使用而设计,因为您不希望网站管理员注入不良内容.
自下而上的方法发誓要失败. HTML清理程序暴露于指数级复杂性并且不保证任何内容.
编辑1
你说这是一个卫生问题,而不是前端问题.我不同意,因为你无法处理所有现在和将来的HTML实体,你最好将它在前端级别限制为100%肯定.
这就是说,也许以下是适合您的解决方案:
>您可以通过条带化所有实体来清理代码
除了使用PHP的strip_tags()的白名单中的那些.
>您还可以删除所有剩余的标签属性(属性)
通过使用PHP的preg_replace()和一些正则表达式.
$string = "put some very dirty HTML here.";
$string = strip_tags($string, '
');
$string = preg_replace("/]*?(\/?)>/i",'', $string);
echo $string;
这将返回您的清理文本.
注意:我已经排除了标记的属性删除,因为您可能仍希望保留href =“”属性.因此[b-z] [B-Z]正则表达式.