Twig-使用引号作为连接过滤器的分隔符

问题描述 投票:2回答:2

我将模板的字符串数组传递给模板,我希望将其转换为jaavascript数组:

控制器文件(php):

$myVar = array('a','b','c');

所需的html:

var myVar = ["a","b","c"];

我尝试以下代码(树枝):

var myVar = ["{{ myVar | join('","') }}"];

但是树枝生成器将引号转换为html实体,这是结果:

var myVar = ["a","b","c"];

一些想法?

twig htmlspecialchars
2个回答
5
投票

您需要应用raw过滤器:

raw

0
投票

Maerlyn的答案将起作用,但是它的缺点是var myVar = ["{{ myVar | join('","') | raw }}"]; 数组中的值也将被原始输出,这取决于该变量的来源,可能会导致您网站中的漏洞,例如XSS。

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

if

第二种方法是让PHP您的PHP处理一切,包括转义,然后在Twig中输出原始字符串:

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
© www.soinside.com 2019 - 2024. All rights reserved.