未捕获的SyntaxError:意外的令牌ILLEGAL设置了一个javascript变量

时间:2013-12-18 03:31:15

标签: javascript google-chrome twig

我知道在SO上有一些问题但我在字符串中找不到任何特殊字符或引号问题。

我在页面上设置了一些javascript变量,如下所示:

current_attachment['og:description'] = "{{ content.objectDescription|e|nl2br }}";

我最终得到了这个字符串:

current_attachment['og:description'] = "Merci à tous les passionnés qui sont passés sur le stand Ducati admirer nos belles italiennes lors du Salon de la Moto. Et pour ceux qui n&#039;ont pas pu se déplacer : une petite photo de famille mêlant légendes et nouveautés, rien que pour vos yeux !<br />
<br />
Thanks";

我有Uncaught SyntaxError: Unexpected token ILLEGAL

2 个答案:

答案 0 :(得分:1)

nl2br实际上并没有删除换行符/换行符,只是添加了<br>个标记,以便新行在浏览器中“可见”(如果在html上下文中输出字符串)。

|e('js')将用它们的unicode转义序列替换几乎所有非字母数字字符,即\xXX\uHHHH,并且会使字符串看起来不那么漂亮(查看来源时。)

因此,我更喜欢使用|json_encode,这可以确保您编码的值是一个正确的javascript文字(例如文字字符串),但没有所有丑陋的转义序列。请注意,如果您对字符串进行编码,则输出将包含包含该字符串的引号。

输出值并且autoescaping生效时(通常是默认设置),请务必添加|raw过滤器,以便自动转换不会更改" s将字符串括在&quot; s。

解决方案(我的建议):

current_attachment['og:description'] = {{ content.objectDescription|json_encode|raw }};

答案 1 :(得分:0)

问题是你的字符串有换行符。为了使您的字符串安全地包含在JavaScript字符串中,您必须使用带有js上下文参数的escape过滤器:

{{ content.objectDescription|e('js') }}

escape的默认操作假设您将内容直接放入HTML,而不是JS字符串。

如果你想在原始代码中使用<br>(即,你最终在适合<br>的HTML上下文中使用该字符串),你应该在之前添加它们escape:

{{ content.objectDescription|nl2br|e('js') }}