HTML净化器转换& - > &安培;

时间:2016-11-07 11:03:11

标签: php yii2 htmlpurifier

我在我的文本字段中使用HTML Purifier(Yii2)。

我需要保存"&"在原始,但净化器转换为"& amp&#34 ;;

我不想在净化器之后使用str_replace

你能帮我配置一下吗?

我的配置:

['name'],
'filter',
'filter' => function($value) {
    return HtmlPurifier::process($value, [
        'HTML.SafeObject' => true,
        'HTML.SafeEmbed' => true,
        'Core.EscapeNonASCIICharacters' => true,
        'Core.Encoding' => 'UTF-8'
    ]);
}

UPD:

文字示例,我想要净化的内容:"公司名称&共"

1 个答案:

答案 0 :(得分:0)

您在评论中提到您在将信息输入数据库之前进行了净化。

我建议你从架构的角度来看重新考虑这个,因为它有一些不足之处,比如你丢失了原来的用户输入(以后你可能想要分析任何一个用户输入)理由),一旦你想对数据做其他事情,你的数据库变得不那么有用了,你当前版本的HTML Purifier中的错误(可能与安全相关)不会被解决。您可以在this answer中查看有关转义/清理上下文的重要性的更多信息。

尽管如此,您之前已经在HTML Purifier论坛上讨论了您的问题:Do not escape ampersand。该主题讨论了为什么难以区别对待&并保持安全并且基本上推荐'不使用HTML Purifier,这当然不能解决您的问题。

尽管如此,如果您被迫将纯化的HTML存储在数据库中,那么该线程中的建议和想法可能会对您有所帮助:

  

也许更有用的响应是:在数据库中存储原始的,用户提交的数据(不在其上运行HTML Purifier),并对其运行搜索查询。但是,存储在数据库中以及HTML Purified版本的缓存版本。

或(这使用<作为示例):

  

没有这样的布尔标志,并且安全地实施将是相当棘手的(你想要做一些愚蠢的事情,比如将文字&lt;和朋友转换成一些不可伪造的文本,然后转换&amp; lt; to文字版。)

但后者不是一种强有力的方法,前者是不必要的冗余。