如何阻止 htmlPurifier 自动解码 html 个实体?
How do I stop htmlPurifier from automatically decoding html entities?
我有一个奇怪的问题。我使用 CKEditor-4 以 html 的形式从用户那里收集格式化文本。此外,html 内容使用来自服务器的 html 净化器过滤。
当用户使用引号 ”
、’
和 “
时,CKEditor 将它们转换为 html 个实体,例如 ”
、’
, 和 “
, 这很好。问题是,当我使用 htmlpurifier 过滤它们时 - 此引号会自动解码。这可以防止内容: 呈现给用户供以后编辑,因为引号字面上以 “
等策略编码
我该如何解决这个问题?我想,如果我能阻止 htmlpurifier 自动解码东西,这会起作用,但我是 htmlpurifier 的新手 - 所以我找不到方法。
在将它传递给 htmlpurifier 之前,我曾尝试使用 htmlentities
。但它会编码整个 html,因此:完全停止 html 净化器净化 html。
经过 CBroe 的评论,我发现我的应用程序一直没有使用 UTF-8。
而且我也无法纠正。对于那些处于类似情况的人,我找到了解决方法。 htmlPurifier 确实支持对所有非 ASCII 字符进行编码并进行一些权衡的配置 - 这对我来说很好(我认为)。
您可以像这样启用 htmlpurifier 配置 Core.EscapeNonASCIICharacters
$config->set('Core.EscapeNonASCIICharacters', true);
这对我有用。
这是完整的功能
/**
* Purifies dirty html
*
* @param string $dirty_html
* @return string
*/
function purifyHtml($dirty_html)
{
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('Core.EscapeNonASCIICharacters', true);
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$config->set('Cache.SerializerPath', getStoragePath('cache/html-purifier'));
$htmlPurifier = new HTMLPurifier($config);
return $htmlPurifier->purify($dirty_html);
}
我有一个奇怪的问题。我使用 CKEditor-4 以 html 的形式从用户那里收集格式化文本。此外,html 内容使用来自服务器的 html 净化器过滤。
当用户使用引号 ”
、’
和 “
时,CKEditor 将它们转换为 html 个实体,例如 ”
、’
, 和 “
, 这很好。问题是,当我使用 htmlpurifier 过滤它们时 - 此引号会自动解码。这可以防止内容: 呈现给用户供以后编辑,因为引号字面上以 “
我该如何解决这个问题?我想,如果我能阻止 htmlpurifier 自动解码东西,这会起作用,但我是 htmlpurifier 的新手 - 所以我找不到方法。
在将它传递给 htmlpurifier 之前,我曾尝试使用 htmlentities
。但它会编码整个 html,因此:完全停止 html 净化器净化 html。
经过 CBroe 的评论,我发现我的应用程序一直没有使用 UTF-8。
而且我也无法纠正。对于那些处于类似情况的人,我找到了解决方法。 htmlPurifier 确实支持对所有非 ASCII 字符进行编码并进行一些权衡的配置 - 这对我来说很好(我认为)。
您可以像这样启用 htmlpurifier 配置 Core.EscapeNonASCIICharacters
$config->set('Core.EscapeNonASCIICharacters', true);
这对我有用。
这是完整的功能
/**
* Purifies dirty html
*
* @param string $dirty_html
* @return string
*/
function purifyHtml($dirty_html)
{
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('Core.EscapeNonASCIICharacters', true);
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$config->set('Cache.SerializerPath', getStoragePath('cache/html-purifier'));
$htmlPurifier = new HTMLPurifier($config);
return $htmlPurifier->purify($dirty_html);
}