Drupal 8如何在Twig中取消菜单项标题的HTML转义?
解决Drupal Twig中菜单项HTML标签被转义的问题
遇到这种Drupal自动转义HTML标签的情况,其实Twig本身就提供了现成的解决方案,我给你两种靠谱的处理方式:
直接在Twig模板里用
raw过滤器
这是最快的解决办法,当你在menu.html.twig里输出菜单项的标题文本时,给标题加上|raw过滤器,就能告诉Twig:“这内容是安全的,别转义它的HTML标签”。举个具体的修改例子,假设你原来输出链接的代码是这样的:
<a href="{{ item.url }}">{{ item.title }}</a>把它改成:
<a href="{{ item.url }}">{{ item.title|raw }}</a>这样
<strong>标签就会被正常渲染,而不是转成实体字符了。在主题预处理函数里标记内容为安全(更推荐)
如果想更安全地控制内容(避免XSS风险),可以在你的主题.theme文件里添加预处理逻辑,把包含HTML的标题标记为“安全标记过的内容”。比如你可以写这样的代码:
function yourtheme_preprocess_menu_link(&$variables) { // 匹配你要修改的菜单项标题 if ($variables['title'] == 'Learn more') { // 用Drupal的Markup类创建安全的HTML内容 $variables['title'] = \Drupal\Core\Render\Markup::create('Learn <strong>more</strong>'); } }这种方式的好处是,你可以精准控制哪些菜单项的标题不被转义,而且明确告诉系统这段内容是安全的,比直接用
raw更稳妥。
⚠️ 注意:不管用哪种方法,都要确保你要渲染的HTML内容是可信的——如果标题来自用户提交的内容,一定要先做安全过滤,不然可能会有XSS攻击的风险哦!
内容的提问来源于stack exchange,提问作者Andrew Magill
相关产品推荐
相关产品推荐

