我知道在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'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
答案 0 :(得分:1)
nl2br实际上并没有删除换行符/换行符,只是添加了<br>
个标记,以便新行在浏览器中“可见”(如果在html上下文中输出字符串)。
|e('js')
将用它们的unicode转义序列替换几乎所有非字母数字字符,即\xXX
和\uHHHH
,并且会使字符串看起来不那么漂亮(查看来源时。)
因此,我更喜欢使用|json_encode
,这可以确保您编码的值是一个正确的javascript文字(例如文字字符串),但没有所有丑陋的转义序列。请注意,如果您对字符串进行编码,则输出将包含包含该字符串的引号。
输出值并且autoescaping生效时(通常是默认设置),请务必添加|raw
过滤器,以便自动转换不会更改"
s将字符串括在"
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') }}