首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails escape_javascript通过转义单引号来创建无效的JSON

Rails escape_javascript通过转义单引号来创建无效的JSON
EN

Stack Overflow用户
提问于 2010-04-27 02:48:15
回答 5查看 18.8K关注 0票数 18

ActionView中的escape_javascript方法将撇号'转义为反斜杠撇号\',这会在解析为JSON时产生错误。

例如,消息"I'm here“在打印时是有效的JSON:

{"message": "I'm here"}

但是,<%= escape_javascript("I'm here") %>输出"I\'m here",导致无效的JSON:

{"message": "I\'m here"}

有没有修复这个问题的补丁,或者在打印到JSON时转义字符串的替代方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-29 08:03:06

只需在字符串上调用.to_json,它将被正确转义,例如

"foo'bar".to_json
票数 11
EN

Stack Overflow用户

发布于 2010-04-27 07:20:03

最后,我在application_helper.rb中添加了一个新的escape_json方法,该方法基于在ActionView::Helpers::JavaScriptHelper中找到的escape_javascript方法

JSON_ESCAPE_MAP = {
    '\\'    => '\\\\',
    '</'    => '<\/',
    "\r\n"  => '\n',
    "\n"    => '\n',
    "\r"    => '\n',
    '"'     => '\\"' }

def escape_json(json)
  json.gsub(/(\\|<\/|\r\n|[\n\r"])/) { JSON_ESCAPE_MAP[$1] }
end

有没有人知道比这更好的变通方法?

票数 8
EN

Stack Overflow用户

发布于 2011-11-08 09:57:46

我遇到了一些与此类似的问题,我需要将Javascript命令放在Rails模板的底部,该模板将字符串放入jQuery.data中,以供以后检索和使用。

每当我在字符串中有一个单引号,我就会在加载页面时得到一个JavaScript错误。

下面是我所做的:

-content_for :extra_javascript do
  :javascript
    $('#parent_#{parent.id}').data("jsonized_children", "#{escape_javascript(parent.jsonized_children)}");
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2715994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档