我正在使用HTMLPurifier清理用户输入的HTML文件。正确的输入文件是简单的纯文本表,但是是由另一个程序创建的,该程序不是我的,并且无法更改或配置,因此我无法更改HTML文件。使用净化器的目的是防止用户意外或恶意上传包含脚本,指向恶意软件站点的链接等文件。
问题在于文件使用Windows代码页1252,其中包含“ 1/2”字符,并且它们还包含HTML实体foo(int *bar)
{
*bar = 42;
}
。这两个字符在默认配置下都会导致HTMLPurifier中出现问题。
HTMLPurifier论坛上有很多有关此问题的文章,建议的解决方案是将所有内容更改为UTF-8字符编码。这不是我的情况的选择。还提到将配置更改为
或%Core.EscapeNonASCIICharacters
。我已经尝试过这些,但是我不确定我的语法是否正确。
这是我现在正在使用的:
%Core.Encoding
这不起作用:它将$config = HTMLPurifier_Config::createDefault();
$config->set('%Core.EscapeNonASCIICharacters', true);
$config->set('%Core.Encoding', 'ASCII');
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($contentsIn);
和&npsp;
(U + 00BD)都转换为Â(Unicode序列的初始字节)。
如何设置HTMLPurifier来生成保留这些字符的输出?