Направляющие escape_javascript создают недопустимый JSON путем выхода из одинарных кавычек

escape_javascript метод в ActionView выходит из апострофа ' как апостроф обратной косой черты \', который дает ошибки при парсинге как JSON.

Например, сообщение "я здесь", допустимый JSON при печати как:

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

Но, <%= escape_javascript("I'm here") %> выводы "I\'m here", получающийся в недопустимом JSON:

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

Существует ли патч для фиксации этого или альтернативного способа выйти из строк при печати к JSON?

18
задан Arrel 26 April 2010 в 20:19
поделиться

3 ответа

Просто вызовите .to_json в строке, и она будет правильно экранирована, например

"foo'bar".to_json
10
ответ дан 30 November 2019 в 08:21
поделиться

В итоге я добавил новый метод 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

Кто-нибудь знает лучший обходной путь, чем этот?

8
ответ дан 30 November 2019 в 08:21
поделиться

Здесь может потребоваться дополнительная информация, но в строках JSON должны использоваться двойные кавычки. Одинарные кавычки допустимы в строках JavaScript, но не в JSON.

4
ответ дан 30 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: