Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于html类属性的带三元运算符的原始筛选器_Html_Css_Attributes_Twig - Fatal编程技术网

用于html类属性的带三元运算符的原始筛选器

用于html类属性的带三元运算符的原始筛选器,html,css,attributes,twig,Html,Css,Attributes,Twig,我一直在试图找出如何阻止Twig转义下面的代码,我觉得使用简洁的三元运算符会更好一些 希望有人能确认我使用了正确的语法,以及在我的\u layout.twig文件中是否有这样做的性能点击: <body{{ bodyClass is defined ? (' class="' ~ bodyClass ~ '"')|raw : '' }}> {% extends "_layout" %} {% set bodyClass = 'Home' %} 似乎工作,是唯一的方式,我已经设

我一直在试图找出如何阻止Twig转义下面的代码,我觉得使用简洁的三元运算符会更好一些

希望有人能确认我使用了正确的语法,以及在我的
\u layout.twig
文件中是否有这样做的性能点击:

<body{{ bodyClass is defined ? (' class="' ~ bodyClass ~ '"')|raw : '' }}>
{% extends "_layout" %}

{% set bodyClass   = 'Home' %}

似乎工作,是唯一的方式,我已经设法获得适当的输出到目前为止

语法和性能对我来说都不错

Twig 1.23.1中的代码编译为:

 echo "<body";
 echo ((array_key_exists("bodyClass", $context)) ?
     (((" class=\"" . (isset($context["bodyClass"]) ? 
        $context["bodyClass"] : null)) . "\"")) : (""));
 echo ">";
echo”“;
如你所见

  • 没有外来的代码,没有任何东西会减慢你的代码
  • 不能绕过任何编译后的代码进行转义,因此结果将是原始的
但这是一个安全噩梦,如果
bodyClass
包含任意代码,那么就有可能向dom注入任何东西


顺便说一句,我借此机会提醒大家,
class=“{{bodyClass}}”
使用默认的转义策略不够安全,使用
{bodyClass|e('html_attr')}}
更安全。

如果有效,那么这个问题更合适。@JimGarrison啊,对不起,我没有在这里发布太多。将添加到那里,谢谢。@JimGarrison看起来像:(感谢阿兰的反馈,非常感谢。关于安全问题,你能详细说明一下吗?我使用的是Craft CMS,所以模板代码位于服务器根
/Craft
下,
/html
由模板呈现。因此,如果它是
\u partial.twig
文件,那么可能无法通过浏览器以任何方式访问它。我已经更新了我的代码以提供更好的上下文。我看了一下Twig属性的东西,但说实话,我无法理解它(至少是函数)这取决于谁设置了<代码> BoyCype 变量。如果你是一个用户,你应该考虑逃逸。顺便问一下,你确定你的类可以包含HTML实体吗?我不确定显式的<代码>原始的< /代码>。尽情享受。啊,我明白了。用户肯定不会走到任何靠近HTML模板的地方。听起来我很好。我想这已经涵盖了我。如果我理解正确,class属性不会包含任何html实体,它是字符串插值。我刚刚发现(Python
%s
格式看起来值得一试)