在将 Rails 变量用于 Javascript 时转义引号?
Posted
技术标签:
【中文标题】在将 Rails 变量用于 Javascript 时转义引号?【英文标题】:Escaping quotes from Rails Variables when using them for Javascript? 【发布时间】:2011-01-11 09:17:16 【问题描述】:尝试在 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 只将'
变成\'
,而不是\\'
,有人对如何处理这个问题有建议吗?
谢谢! 埃里克
【问题讨论】:
【参考方案1】:当您尝试
alert('I\'m testing');
时出现问题
反斜杠也是 Ruby 字符串中的转义符!所以字符串文字:
"alert('I\'m testing');"
表示字符串:
alert('I'm testing');
反斜杠在 JavaScript 看到它之前就已经消失了。当您在 inside 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 字符串文字,包括周围的引号。
【讨论】:
它还有一个简单的“j”别名:“'”+j(myvar)+"'" 给近期读者的注意事项:从 rails 3.2(可能更早)开始,方法是escape_javascript
而不是 javascript_escape
以上是关于在将 Rails 变量用于 Javascript 时转义引号?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Rails 视图中将 Ruby 变量传递给 JavaScript 函数?
Rails:在 CoffeeScript 或 JavaScript 资产文件中访问控制器实例变量
将 Rails 3.1 项目部署到 Heroku 时出现问题:找不到 JavaScript 运行时