如何让PHP strip_tags删除HTML和Script标签,而不是XML?

时间:2012-05-03 17:44:58

标签: php html xml strip-tags

我使用php strip_tags()函数从我的文本区域输入中删除html标记并删除<脚本>用于防止脚本攻击的标签。

无论如何,用户通常需要输入事先不知道的XML标签。但是,我的strip_tags函数也正在删除这些良性xml标记,这是不可接受的。

另外,我有时会把文件名。< date> .png(必须在那里添加空格,因为StackOverflow也将其删除了lol)以指示文件名或路径的可变部分。在这种情况下,我最终得到的是在运行strip_tags之后的filename..png。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

无法使strip_tags删除未知标记。您可能希望查看DOMDocument以寻找可行的替代方案。

答案 1 :(得分:0)

strip_tags()定义为删除所有HTML / XML标记(第二个参数中指定的各个标记除外)。两种类型的标记之间没有区别,也没有区分它们和用作占位符的<date> - 这三种标记看起来都像strip_tags()的标记,所以它会删除它们。

答案 2 :(得分:0)

$s = preg_replace("/<\?xml(.*?)\?>/i", "<xmlDeclaration$1>", $s);
$s = strip_tags($s, '<xmlDeclaration><' . implode('><', $allowedTags) . '>');
$s = preg_replace("/<xmlDeclaration(.*?)>/i", "<?xml$1?>", $s);