在使用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字符串文字,包括周围的引号。