【问题标题】:How do I get PHP strip_tags to remove HTML and Script tags but not XML?如何让 PHP strip_tags 删除 HTML 和 Script 标签而不是 XML?
【发布时间】:2012-05-03 17:44:58
【问题描述】:

我正在使用 php strip_tags() 函数从我的文本区域输入中删除 html 标签,并删除 标签以帮助防范脚本攻击。

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

另外,我有时会放 filename..png (必须在此处添加一个空格,因为 StackOverflow 也将其删除了,哈哈)来指示文件名或路径的可变部分。在这种情况下,我最终得到的是运行 strip_tags 后的 filename..png。

任何帮助将不胜感激。

【问题讨论】:

  • 因为 xml 也使用标签,所以你不能。此外,它基本上会破坏字符串标签的用途,因为您仍然可以将 javascript 塞进任何未知标签中。

标签: php html xml strip-tags


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    不可能使strip_tags 不删除未知标签。您可能想查看DOMDocument 以寻找可行的替代方案。

    【讨论】:

      【解决方案3】:
      $s = preg_replace("/<\?xml(.*?)\?>/i", "<xmlDeclaration$1>", $s);
      $s = strip_tags($s, '<xmlDeclaration><' . implode('><', $allowedTags) . '>');
      $s = preg_replace("/<xmlDeclaration(.*?)>/i", "<?xml$1?>", $s);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 2013-08-19
        • 1970-01-01
        相关资源
        最近更新 更多