2

我正在使用HTML Purifier,这是一个 PHP“过滤器,可防止 XSS 并确保符合标准的输出”来清理/标准化用户输入的标记。

这是用户输入标记的示例:

<font face="'Times New Roman', Times">TEST</font>

生成:

<span style="font-family:&quot;Times New Roman&quot;, Times;">TEST</span>

我有点困惑,因为&quot甚至不是单引号的转义字符。由于我稍后将使用此用户生成的内容,因此这里的最佳做法是什么?

  • 保持原样
  • 在净化器执行后全部&quot替换\'
  • 以不同方式配置 HTML Purifier
  • 还有什么?
4

2 回答 2

2

在我看来没问题。

我认为从单引号到双引号的转换来自这样一个事实,即 HTML 净化器将整个标签拆开,并根据自己的规则将其重新组合在一起,当引用style属性内的内容时恰好使用双引号。

它对我来说也很好。您要验证的文档类型是什么?

如果我没有忽略某些东西,我会说可以按原样使用。

于 2010-09-05T09:27:01.300 回答
1

输出是 XHTML 有效的,但实体转换是错误的。<img src="/test" alt="I'm ok"/>将转换为<img src="/test" alt="I&quot;m ok">

一个简单的就足够了:

$allowed_tags='<font>';
echo htmlspecialchars(strip_tags(rawurldecode($input),$allowed_tags),ENT_COMPAT,'UTF-8');

但它不会将 <font> 标签转换为 <span>。

于 2010-09-05T09:44:58.390 回答