我在我的文本字段中使用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:
文字示例,我想要净化的内容:"公司名称&共"
答案 0 :(得分:0)
您在评论中提到您在将信息输入数据库之前进行了净化。
我建议你从架构的角度来看重新考虑这个,因为它有一些不足之处,比如你丢失了原来的用户输入(以后你可能想要分析任何一个用户输入)理由),一旦你想对数据做其他事情,你的数据库变得不那么有用了,你当前版本的HTML Purifier中的错误(可能与安全相关)不会被解决。您可以在this answer中查看有关转义/清理上下文的重要性的更多信息。
尽管如此,您之前已经在HTML Purifier论坛上讨论了您的问题:Do not escape ampersand。该主题讨论了为什么难以区别对待&
并保持安全并且基本上推荐'不使用HTML Purifier,这当然不能解决您的问题。
尽管如此,如果您被迫将纯化的HTML存储在数据库中,那么该线程中的建议和想法可能会对您有所帮助:
也许更有用的响应是:在数据库中存储原始的,用户提交的数据(不在其上运行HTML Purifier),并对其运行搜索查询。但是,存储在数据库中以及HTML Purified版本的缓存版本。
或(这使用<
作为示例):
没有这样的布尔标志,并且安全地实施将是相当棘手的(你想要做一些愚蠢的事情,比如将文字&lt;和朋友转换成一些不可伪造的文本,然后转换&amp; lt; to文字版。)
但后者不是一种强有力的方法,前者是不必要的冗余。