我知道逃避所有输出是最好的做法。然而,当人们在内容中使用特殊字符时,我遇到了一些问题。e、 g.&;,–,等
请注意,我使用的是木材,因此,例如,如果一篇文章标题使用了&;在文本中,我呼应并转义标题如下:
{{ post.title|e() }}
(不使用细枝
<?php echo esc_html($post->title); ?>
)
页面显示htmlentity代码(即。&
) 并且它不会在浏览器中转换为符号。但是,如果我在没有转义的情况下回显,它将正确显示。
我想也许木材、树枝或WordPress是自动转义的,也许我的内容是双重转义的,但是如果我在标题中添加一个脚本来测试输出,例如。"<script>alert(\'hello\');</script>"
如果我不逃跑,这个脚本将运行。
My question is how can I keep output safe but still render special characters in the browser that the user would expect to see from their content? And isn\'t this how it should be working by default (i.e. browser rendering escaped ampersand correctly)?
SO网友:Jacob Peattie
如果我把<script>alert(\'hello\');</script>
在具有默认主题的WordPress页面标题中,脚本将运行。这是预期的行为。WordPress中的标题通常允许使用HTML。标准WordPress功能,the_title()
, 不转义标题。
如果不想允许使用脚本标记,则需要清理输入,以便在保存帖子时去掉任何不需要的标记。WordPress已经为没有unfiltered_html
能力。它通过使用wp_kses_post()
函数(请注意,此函数太慢,无法用于前端转义)。
如果您只想删除HTML标记,而不想对任何其他字符进行编码,那么应该使用strip_tags()
作用看起来像你use this in Twig with striptags
:
{{ some_html|striptags }}