Ruby показывает html-тег в виде строки

#ruby-on-rails #ruby #ruby-on-rails-4 #ruby-on-rails-5

Вопрос:

У меня есть API Rails, который отображает некоторые данные в формате JSON. Ответ выглядит хорошо, когда пользователь вводит открытый текст. Но когда я добавляю html-теги или специальные символы, такие как»», во входные данные, они преобразуются в символы юникода. Я хотел бы отобразить все это как строку, независимо от того, что добавляет пользователь. Я пробовал использовать to_s , но это все равно не преобразует эти биты в строку.

  result.each do |row|
      i = row["i"].to_s
      j = row["j"].to_s
      obj[i][j] = {}
      obj[i][j]["name"] = row["name"].to_s
  end

Given: <p>name</p>
Output :u003cpu003enameu003c/pu003e
Expected output: <p>name</p>
 

Комментарии:

1. Не уверен, почему он возвращает символы Юникода. Вы пробовали принудительно кодировать кодировку в UTF-8 ? Кроме того, я подумываю об использовании raw(<String>) или <String>.html_safe

2. @Sumak да, на самом деле это показывает тот же результат. Не анализирует его в html-теги

3. Я не понимаю, как вы думаете, что сможете передавать " в JSON, не избегая его, поскольку это зарезервированный символ? Это пахнет как вопрос Xamp;Y.

Ответ №1:

Вы отображаете данные в формате JSON. Вот как выглядят эти символы в виде строки JSON.

 '<p>name</p>'.to_json
=> ""\u003cp\u003ename\u003c/p\u003e""
JSON.parse ""\u003cp\u003ename\u003c/p\u003e""
=> "<p>name</p>"