2

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

控制器文件(php):

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

所需的html:

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

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

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

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

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

有什么想法?

4

2 回答 2

5

您需要应用raw过滤器:

var myVar = ["{{ myVar | join('","') | raw }}"];
于 2012-07-19T14:57:20.007 回答
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 }}
于 2020-03-05T06:21:10.490 回答