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

Eri*_*ric 15 javascript quotes escaping ruby-on-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只转'\',而不是\\',是否有人对如何处理这一建议?

谢谢!埃里克

bob*_*nce 29

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

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

"alert('I\'m testing');"
Run Code Online (Sandbox Code Playgroud)

表示字符串:

alert('I'm testing');
Run Code Online (Sandbox Code Playgroud)

在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.
Run Code Online (Sandbox Code Playgroud)

所以,这很好:

"'"+escape_javascript(myvar)+"'"
Run Code Online (Sandbox Code Playgroud)

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

  • 它还有一个简单的"j"别名:"'"+ j(myvar)+"'" (6认同)
  • 最近读者的一个注释:从rails 3.2(也许之前)开始,这个方法是`escape_javascript`而不是`javascript_escape` (2认同)