我向模板传递了一个字符串数组,我希望将其转换为jaavascript数组:
控制器文件(php):
$myVar = array('a','b','c');
所需的HTML:
var myVar = ["a","b","c"];
我尝试以下代码(twig):
var myVar = ["{{ myVar | join('","') }}"];
但是twig生成器将引号转换为html实体,这就是结果:
var myVar = ["a","b","c"];
有些想法?
答案 0 :(得分:5)
您需要应用raw
过滤器:
var myVar = ["{{ myVar | join('","') | raw }}"];
答案 1 :(得分:0)
Maerlyn的答案将起作用,但是它的缺点是myVar
数组中的值也将被原始输出,这取决于该变量的来源,可能导致您网站中的漏洞,例如作为XSS。
我找到了两种方法来保持数组值的转义。第一种是使用带有if
语句的循环来检查它是否是最后一次迭代,以确定是否需要输出联接中使用的“胶水”:
var myVar = [{% for val in myVar %}"{{ val }}"{% if loop.last == false %},{% endif %}{% endfor %}]
第二种方法是让PHP您的PHP处理一切,包括转义,然后在Twig中输出原始字符串:
$arr = array_map(
function($value) {
return '"' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '"';
},
$arr
);
$myVar = '[' . implode(',', $arr) . ']';
然后将$myVar
变量传递到您的视图,然后您可以执行以下操作:
{{ myVar|raw }}