Twig 细枝-使用引号作为联接筛选器的分隔符

Twig 细枝-使用引号作为联接筛选器的分隔符,twig,htmlspecialchars,Twig,Htmlspecialchars,我向模板传递一个字符串数组,我想将其转换为jaavascript数组: 控制器文件(php): 所需的html: var myVar = ["a","b","c"]; 我尝试以下代码(细枝): 但细枝生成器将引号转换为html实体,结果如下: var myVar = ["a","b","c"]; 有什么想法吗?您需要应用过滤器: Maerlyn的答案是可行的,但是它的缺点是myVar数组中的值也会被原始输出,这取决于该变

我向模板传递一个字符串数组,我想将其转换为jaavascript数组:

控制器文件(php):

所需的html:

var myVar = ["a","b","c"];
我尝试以下代码(细枝):

但细枝生成器将引号转换为html实体,结果如下:

var myVar = ["a","b","c"];
有什么想法吗?

您需要应用过滤器:


Maerlyn的答案是可行的,但是它的缺点是
myVar
数组中的值也会被原始输出,这取决于该变量的来源,可能会导致网站中存在漏洞,如XSS

我找到了两种方法来实现这一点,同时保持对数组值的转义。第一种方法是使用带有
if
语句的循环来检查它是否是最后一次迭代,以确定是否需要输出联接中使用的“胶水”:

var myVar = [{% for val in myVar %}"{{ val }}"{% if loop.last == false %},{% endif %}{% endfor %}]
第二种方法是让PHP处理所有事情,包括转义,然后在Twig中输出原始字符串:

$arr = array_map(
    function($value) {
        return '"' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '"';
    },
    $arr
);
$myVar = '[' . implode(',', $arr) . ']';
然后将
$myVar
变量传递给您的视图,然后您可以执行以下操作:

{{ myVar|raw }}
var myVar = [{% for val in myVar %}"{{ val }}"{% if loop.last == false %},{% endif %}{% endfor %}]
$arr = array_map(
    function($value) {
        return '"' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '"';
    },
    $arr
);
$myVar = '[' . implode(',', $arr) . ']';
{{ myVar|raw }}