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