转义字符串 - 在Javascript中输出Rails字符串

23

我正在尝试在我的.erb文件中将一个字符串值分配给JavaScript对象,就像这样:

var data = {
    'name': '<%= @product.name %>',
    ...
};

问题在于,如果name的值为Tom's small ears

data.name的输出将会是Tom&#x27;s small ears

有没有一种方法可以转义特殊字符?

我尝试使用'name': '<%= raw @product.name %>',但在控制台中输出Uncaught SyntaxError: Unexpected identifier

使用<%= escape_javascript @product.name %>会输出Tom\&#x27;s small ears

编辑MrYoshiji的回答下,@Stefan的评论对我有效。

2个回答

39

现在的输出是 Tom\&#x27;s small ears - cclerv
当我测试这段代码时,它在我的视图中显示了 Tom\'s small ears。尝试在视图中直接打印 <%= j @product.name %>(而不是在 JavaScript 标签中),看看输出是否符合预期。 - MrYoshiji
它在我直接输出时有效,但我想将该值放入一个JavaScript变量中。 - cclerv
6
Rails似乎会转义单引号',请尝试使用<%==而不是<%= - Stefan
1
@Ievgen请看这里第一个答案的第二个评论:https://dev59.com/dWsz5IYBdhLWcg3wTl0T 引用:“双等号意味着字符串不会被转义,就像原始字符串一样”。 - MrYoshiji
显示剩余2条评论

-1
var data = {
   'name': '<%=j @product.name.html_safe %>',
   ...
};

1
请不要这样做,除非您已经验证过@product.name是一个经过消毒的字符串,不会导致HTML注入。 - Andrew
@Andrew 我相信 j(代表 escape_javascript)会正确地转义字符串,对吧?(也就是说这个例子本来就没问题,只是调用 html_safe 是不必要的)。 - davmac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接