我想要这样的事情:
{{ 'bl<b>a</b>h [b]blah[/b]'|raw|simple_bbcode }}
但即使在raw之后使用simple_bbcode过滤器,我的更改标签([b]到&lt; b&gt;)仍会被转义。
现在我有了这个:
{{ 'b<b>l</b>ah [b]blah[/b]'|simple_bbcode|raw }}
这使得simple_bbcode运行良好,但也可以应用恶意代码。
我知道为什么会发生这种情况,但我不知道如何让它像我想的那样工作。有什么建议?
//编辑
忘记提及将过滤器更改为函数不会改变任何内容。
答案 0 :(得分:1)
更新:此答案无法解决问题。看到我的其他答案。
您是否尝试使用{{ 'b<b>l</b>ah [b]blah[/b]'|simple_bbcode|striptags('<b>')|raw }}
?
我认为它可行。
如果您需要删除更多标记,例如<b>
,请按以下方式添加:striptags('<b><p><a>')
我希望我能帮助你,交配。
答案 1 :(得分:1)
忘掉之前的答案,我找到了一个有效的解决方案:
我们有文字:
{{ '<b>We</b> have a <a href="#">link</a> that [b]should[/b] not work.'|simple_bbcode|raw }}
我们假设您已注册 simple_bbcode 过滤器,因此我们将跳过该部分并直接转到过滤器代码:
public function simpleBbcodeFilter($string)
{
return preg_replace(array('/\[b\]/','/\[\/b\]/'), array('<b>', '</b>'), htmlspecialchars($string));
}
这样我们首先逃避所有 html标记以禁止它们。然后,通过替换,我们只允许将[b]*[/b]
代码转换为它的html标记。因此只有[b]*[/b]
才有效。如果您放置,例如[a]*[/a]
将不会被转换。
在此之后,我们不能忘记将|raw
放在上面。那是你在找什么?