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时转义字符串的替代方法?
发布于 2010-07-29 08:03:06
只需在字符串上调用.to_json,它将被正确转义,例如
"foo'bar".to_json
发布于 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
有没有人知道比这更好的变通方法?
发布于 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)}");
https://stackoverflow.com/questions/2715994
复制相似问题