提问人:testtesttesteettesttesttesttes 提问时间:4/11/2022 最后编辑:veetesttesttesteettesttesttesttes 更新时间:4/12/2022 访问量:331
HTML Purifier - 字符编码
HTML Purifier - Character Encoding
问:
我计划将 HTML Purify 用于我的 Web 服务的输出。我没有看到集成的“登录”功能来检查替换的内容,所以我自己编写了它。
但是,purifier() 函数会自动转换我的特殊字符“entities”。
例如:
& -> &
ø -> ø
现在的问题是,这些也将被“记录”,因为我的日志记录函数比较了“纯化”字符串和原始字符串之间的差异。有没有办法避免这种自动编码/解码,或者有没有人知道如何检查实际替换的内容?
谢谢!
答:
您引用的两个示例实际上是两个不同的用例;一个是因为 HTML Purifier 使你的输出安全 (),另一个是使用 UTF-8 而不是实体的 HTML Purifier,因为这是它的内部表示。& -> &
一般来说,如果你的 HTML 是安全的,HTML Purifier 将输出语义上等效的 HTML,它实际上并不能保证保留所有空格或表示形式,因为它的重点完全是安全性,而不是安全 HTML 的幂等性,并且它为了彻底分析而大量转换传入的 HTML。
您可以强制它始终使用 Core.EscapeNonASCIICharacters 将所有非 ASCII 字符转换为实体,但我怀疑这是您想要的 - 它还会将任何当前不是实体的 UTF-8 更改为实体。它也没有解决未转义的 HTML 特殊字符将被转义的问题 () - HTML Purifier 不会冒险,因此即使是那些巧合/上下文安全的 HTML 特殊字符也将始终被编码。& -> &
相反,请查看 Core.CollectErrors。这应该可以检查您正在寻找的更改。尽管文档中有警告,但它是一个可靠的功能。您可以在此处查看该功能的示例用法。tl;dr 是要获取错误收集器,请使用 ,并获取错误列表(包括替换),.试试看它是否有效?$purifier->context->get('ErrorCollector');
$errorCollector->getRaw()
评论