Arr*_*rel 18 json escaping ruby-on-rails
ActionView中的escape_javascript方法将撇号转义'为反斜杠撇号\',在解析为JSON时会出错.
例如,打印时,"我在这里"消息是有效的JSON:
{"message": "I'm here"}
Run Code Online (Sandbox Code Playgroud)
但是,<%= escape_javascript("I'm here") %>输出"I\'m here"导致无效的JSON:
{"message": "I\'m here"}
Run Code Online (Sandbox Code Playgroud)
是否有补丁来修复此问题,或者在打印到JSON时是否有另外一种方法来转义字符串?
我最终escape_json根据以下escape_javascript方法中的方法向application_helper.rb 添加了一个新方法ActionView::Helpers::JavaScriptHelper:
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
Run Code Online (Sandbox Code Playgroud)
有人知道比这更好的解决方法吗?
小智 5
我有一些与此类似的问题,我需要将Javascript命令放在Rails模板的底部,该模板将字符串放入jQuery.data以供以后检索和使用.
每当我在字符串中使用单引号时,我在加载页面时会收到JavaScript错误.
这是我做的:
-content_for :extra_javascript do
:javascript
$('#parent_#{parent.id}').data("jsonized_children", "#{escape_javascript(parent.jsonized_children)}");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17505 次 |
| 最近记录: |