【问题标题】:How do I stop htmlPurifier from automatically decoding html entities?如何阻止 htmlPurifier 自动解码 html 实体?
【发布时间】:2020-12-15 07:55:48
【问题描述】:

我有一个奇怪的问题。我使用 CKEditor-4 以 html 的形式从用户那里收集格式化文本。此外,使用来自服务器的 htmlpurifier 过滤 html 内容。

当用户使用 等引号时,CKEditor 会将它们转换为”’“ 等html 实体,这很好。问题是,当我使用 htmlpurifier 过滤它们时 - 这个引号会自动解码。这可以防止内容:被呈现给用户以供以后编辑,因为引号以像“这样的巧妙方式进行逐字编码

我该如何解决这个问题?我认为,如果我可以阻止 htmlpurifier 自动解码,这将起作用,但我是 htmlpurifier 的新手 - 所以我找不到方法。

在将htmlentities 传递给 htmlpurifier 之前,我曾尝试使用它。但它会对整个 html 进行编码,因此:完全停止 htmlpurifier 对 html 的净化。

【问题讨论】:

  • “ 的UTF-8 表示,但解释为 ISO-8859-1 或类似的东西。您的网站/应用程序是否一直不使用 UTF-8?
  • 什么意思?我对编码的东西知之甚少。
  • 我使用 meta charset="UTF-8"。是这个意思吗?

标签: php html htmlpurifier


【解决方案1】:

在 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);
}

【讨论】:

  • 很高兴您想通了 - 感谢您分享您的解决方案。如果您还不知道,您应该知道您可以在两天内接受自己的答案,将此问题标记为已解决:) stackoverflow.blog/2009/01/06/accept-your-own-answers
  • 啊,我明白了。谢谢
  • @MohamedMufeed 我遇到了同样的问题并尝试了您的解决方案。它不适合我。我想知道这是不是我的配置。你是如何设置你的配置的?我做了$config = \HTMLPurifier_Config::createDefault();。如果你能发布你的代码,那就太棒了。
  • @Fly_Moe 已更新。我必须说它已经太久了。所以我不记得我以前知道的关于配置的很多事情了。
猜你喜欢
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
相关资源
最近更新 更多