在使用Jails时从Rails变量中转义引号?

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

例如,我可以定义一个link_to_remote,参数:complete => "alert('my_var');"

如果my_var = "I'm testing." ,然后由于单引号过早关闭代码,javascript代码将中断。 如果我尝试使用escape_javascript(my_var)以便引用变为\' ,它似乎无法解决问题。

我注意到当你尝试alert('I\'m testing'); 有一个问题,但如果你做alert('I\\'m testing') ,它就可以了。 由于escape_javascript只会变为'而不是\\' ,有人建议如何处理这个问题吗?

谢谢! 埃里克

当你尝试alert('I\'m testing'); 有一个问题

反斜杠也是Ruby字符串中的一个转义! 所以字符串文字:

 "alert('I\'m testing');" 

表示字符串:

 alert('I'm testing'); 

在JavaScript看到之前,反斜杠已经消失了。 当你 Ruby字符串文字中编写一个JavaScript字符串文字时,你需要转义转义符\\ ,以获得一个真正的\ ,然后在JavaScript中,逃避撇号。

如果输入中包含反斜杠,则escape_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字符串文字,包括周围的引号。