escape_javascript метод в ActionView выходит из апострофа '
как апостроф обратной косой черты \'
, который дает ошибки при парсинге как JSON.
Например, сообщение "я здесь", допустимый JSON при печати как:
{"message": "I'm here"}
Но, <%= escape_javascript("I'm here") %>
выводы "I\'m here"
, получающийся в недопустимом JSON:
{"message": "I\'m here"}
Существует ли патч для фиксации этого или альтернативного способа выйти из строк при печати к JSON?
Просто вызовите .to_json в строке, и она будет правильно экранирована, например
"foo'bar".to_json
В итоге я добавил новый метод escape_json
в свой application_helper.rb, основанный на методе escape_javascript
, найденном в 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
Кто-нибудь знает лучший обходной путь, чем этот?
Здесь может потребоваться дополнительная информация, но в строках JSON должны использоваться двойные кавычки. Одинарные кавычки допустимы в строках JavaScript, но не в JSON.