在Javascript中使用Rails变量时是否从中转义引号?

在Javascript中使用Rails变量时是否从中转义引号?,javascript,ruby-on-rails,escaping,quotes,Javascript,Ruby On Rails,Escaping,Quotes,我在javascript代码中尝试使用rails变量时遇到问题 例如,我可以使用参数定义链接到远程 :complete=>“警报('my_var');” 如果my_var=“I'm testing.”,则javascript代码将由于单引号过早关闭代码而中断。如果我尝试使用escape\u javascript(my\u var)将引号转换为\',似乎无法解决问题 我注意到当您尝试alert(“我正在测试”)时有一个问题,但是如果您发出警报('I\\'m testing'),它就会工作。由于es

我在javascript代码中尝试使用rails变量时遇到问题

例如,我可以使用参数定义链接到远程
:complete=>“警报('my_var');”

如果
my_var=“I'm testing.”
,则javascript代码将由于单引号过早关闭代码而中断。如果我尝试使用
escape\u javascript(my\u var)
将引号转换为
\'
,似乎无法解决问题

我注意到当您尝试
alert(“我正在测试”)时有一个问题,但是如果您发出
警报('I\\'m testing')
,它就会工作。由于escape\u javascript只将
'
转换为
\'
,而不是
\\'
,有人对如何处理这个问题有什么建议吗

谢谢! 埃里克

当您尝试
alert(“我正在测试”)时有个问题

反斜杠在Ruby字符串中也是一种转义!因此字符串文本:

"alert('I\'m testing');"
表示字符串:

alert('I'm testing');
在JavaScript查看反斜杠之前,反斜杠已经消失了。当您在Ruby字符串文本中编写JavaScript字符串文本时,您需要转义,
\\
,以获得真正的
\
,然后在JavaScript中转义撇号

escape\u javascript
如果输入中包含反斜杠,则会正确生成javascript的反斜杠。但同样,如果您正在编写字符串文字,则必须避开反斜杠才能得到真正的反斜杠:

escape_javascript("\b")     -> this is a backspace character!
escape_javascript("\\b")    -> this is backslash-then-letter-b;
                               escaped for JavaScript literal to double-backslash-then-b.
所以,这很好:

"'"+escape_javascript(myvar)+"'"

或者,您可以使用JSON编码器创建JavaScript字符串文字,包括周围的引号。

它还有一个简单的“j”别名:“+j(myvar)+””。最近的读者注意:从rails 3.2(或者更早)开始,方法是
escape\u JavaScript
而不是
JavaScript\u escape