如何禁用HTML中KnpMenuBundle标签逃逸(How to disable HTML esc

2019-08-31 19:34发布

我想呈现的HTML标签,如:

$menu->addChild('Dashboard', array(
    'route' => 'dashboard', 
    'label' => '<i class="fa-icon-bar-chart"></i><span class="hidden-tablet"> Dashboard</span></a>',
    'extra' => array('safe_label' => true)
    )
);

我已经通过,同时渲染合适的选择:

{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} ) }}

但我的标签仍然在逃脱。 我究竟做错了什么?

Answer 1:

好吧,答案是!

您设置在菜单项多余的物品不被“额外”的关键,但通过“额外”的关键。 所以,当你设置这样的项目:

$menu->addChild('Dashboard', array(
    'route' => 'dashboard', 
    'label' => '<i class="fa-icon-bar-chart"></i><span class="hidden-tablet"> Dashboard</span></a>',
    'extras' => array('safe_label' => true)
)
);

它工作正常!



Answer 2:

有两个步骤来实现这一目标。

1.使用MenuBuilder

你必须设置safe_labeltrueextras 。 请注意,您现在就可以编写HTML的标签。

$menu->addChild('Home<i><b></b></i>', array(
    'route' => 'homepage',
    'extras' => array(
        'safe_label' => true
    ),
));

2.嫩枝

你必须滤波器的输出knp_menu_render()使其打印原始HTML (见文档 )。

{{ knp_menu_render('main', {'allow_safe_labels': true}) | raw }}

警告

请注意,这可能是危险的。 从文档 :

所以请谨慎使用,因为它可以在你的应用程序中创建一些XSS漏洞,如果标签从用户的到来。



Answer 3:

我用FyodorX的方法添加一个强有力的标签。 它的工作原理就像一个魅力,但我必须说,原过滤器是没有必要的



Answer 4:

尝试使用原始过滤器

{{ knp_menu_render('WshCmsHtmlBundle:Builder:mainMenu', {'allow_safe_labels': true} )|raw }}


文章来源: How to disable HTML escaping of labels in KnpMenuBundle