Нежелательные символы - \r \n вставляются в БД - мне нужно удалить их на моей странице просмотра

Я использовал html_safe, raw, а также sanitize. Но я по-прежнему использую такие символы, как \r \n — это потому, что я использую клавишу «возврат/ввод» в Mac для перехода к следующей строке, когда я ввожу данные в свое поле описания, которое является текстовой областью. Есть ли способ избежать этого на моей странице просмотра.

фактический результат -

\r\ntext text text text text text

\r\n\r\n

this place is famous for blah blah blah

ожидаемый результат-

text text text text text text

this place is famous for blah blah blah

person Hayz    schedule 11.07.2016    source источник
comment
Этот вопрос неоднозначен. Отфильтровав \r и \n, вы никогда не получите «это место бла» _на другой строке.   -  person Aleksei Matiushkin    schedule 11.07.2016
comment
Я могу удалить его и заменить на ‹br /›. Я пытался использовать gsub, но это не сработало для \r и \n.   -  person Hayz    schedule 11.07.2016
comment
Определение не сработало в контексте вашего комментария gsub   -  person David Ljung Madison Stellar    schedule 11.07.2016
comment
Вы действительно видите \r\n на своей HTML-странице? Или вы видите новые строки и возврат каретки на своей HTML-странице?   -  person David Ljung Madison Stellar    schedule 11.07.2016
comment
А что на самом деле в вашей БД? Вы использовали программу просмотра/редактора БД для просмотра сохраненных записей?   -  person David Ljung Madison Stellar    schedule 11.07.2016
comment
В моей БД есть описание, сохраненное с помощью \r\n .так же, как я написал выше, и я вижу новые строки и возврат каретки на моей html-странице, чего не должно быть.   -  person Hayz    schedule 11.07.2016
comment
Чтобы было ясно, \r может означать либо символы «обратная косая черта» и буква «r», либо символ возврата каретки. Как вы вызывали gsub и как это не работало?   -  person David Ljung Madison Stellar    schedule 11.07.2016
comment
Я попробовал ‹%= @attraction.description.gsub(/\r\n/,).html_safe %› хотя HTML-безопасность работает хорошо   -  person Hayz    schedule 11.07.2016


Ответы (3)


Вы можете либо удалить символы, прежде чем вставлять их в БД, либо удалить их в представлении.

В любом случае вы можете сделать это с помощью gsub — ваш комментарий выше показывает, что вы неправильно использовали gsub (не забудьте опубликовать то, что вы пробовали, в своем вопросе, а также результаты!)

Пример:

@attraction.description.gsub(/\r\n/,'')

Это заменит только возврат каретки, за которым следует новая строка, вместо этого я предлагаю заменить любые возвраты новой строки/каретки:

@attraction.description.gsub(/[\r\n]/,'')

Если вы хотите заменить на:

@attraction.description.gsub(/[\r\n]+/,'<br />').html_safe

И так далее..

С другой стороны, если вы на самом деле видите текст "\r\n" в своем выводе, то вы каким-то образом преобразовали возврат каретки и новые строки в их "типируемые" аналоги, возможно, с чем-то вроде вызова str.inspect перед сохранением их?

Если это так, то вы хотите заменить не символы возврата каретки и символы новой строки, а строки "\r" и "\n", например:

@attraction.description.gsub(/\\[rn]/,'').html_safe

(Вы заключали свое регулярное выражение в кавычки для gsub, делая его сравнением строк, а не регулярным выражением)

person David Ljung Madison Stellar    schedule 11.07.2016
comment
Описание представляет собой поле из нескольких строк, поэтому оно не работает. То, как вы сказали, хорошо работает в гораздо меньшем контексте - когда у меня было всего 2 строки, разделенные новой строкой. - person Hayz; 11.07.2016
comment
Он должен работать со строкой, в которой есть несколько новых строк. Если это так, отметьте ответ как принятый, если нет, объясните, почему это не удается. - person David Ljung Madison Stellar; 11.07.2016
comment
У меня есть данные в текстовой области, т.е. @attraction.description = ‹p›Нет лучшего способа завершить сказочный день в парке‹/p›\r\n\r\n‹p›Сотканные вместе рассказом о дружбе и мужество, которое останется с вами еще долго после того, как вы покинете наш волшебный остров.‹/p›\r\n\r\n‹p›‹h2›Сюжет:‹/h2›‹br›\r\nИсследуйте новые измерения мальчик и девочка находят настоящую дружбу?‹/p›\r\n\r\n‹p›История продолжается‹/p› Тогда я делаю @attraction.description.gsub(/[\r\n]+/,' ‹br /›').html_safe, но не показывает точный результат - - person Hayz; 11.07.2016
comment
И какой результат показывает? Вам действительно нужно усвоить, что для того, чтобы правильно получить помощь и/или написать отчет об ошибке, вам нужно точно указать, что вы пробовали, а также каковы были результаты, а не только что это не удалось или это не сработало. - person David Ljung Madison Stellar; 11.07.2016
comment
Если у вас уже есть ‹p› в тексте, просто удалите возврат каретки и новую строку со вторым gsub. И снова, вы сказали в одном из своих комментариев выше, что видите новые строки в своем HTML, это правда? Или вы видите настоящую строку \n и \r? - person David Ljung Madison Stellar; 11.07.2016
comment
в результате \r\n\r\n история о дружбе и мужестве соткана вместе, которая останется с вами еще долго после того, как вы покинете наш волшебный остров. \r\n\r\n Сюжет: \r\nИсследуйте новые измерения Найдут ли мальчик и девочка настоящую дружбу? \r\n\r\n История продолжается, т.е. я действительно вижу \n и \r. - person Hayz; 11.07.2016
comment
А, тогда это другая проблема. Я обновлю свой ответ. - person David Ljung Madison Stellar; 11.07.2016
comment
Большое спасибо Дэвид, это сработало хорошо :) Большое спасибо за ваше время и помощь. Я приму ваш ответ. - person Hayz; 11.07.2016

Надеюсь, это может помочь вам:

    %{ Multi-line
   string }.squish                   # => "Multi-line string"

" foo   bar    \n   \t   boo".squish # => "foo bar boo"

http://apidock.com/rails/String/squish

person Atchyut Nagabhairava    schedule 11.07.2016
comment
Извините, это не сработало. Пожалуйста, обратитесь к принятому ответу. Но спасибо за ваше время :) - person Hayz; 11.07.2016

Ну, я тестировал это онлайн, а не на своем рубине, поэтому не знаю, работает ли он на 100%. Но из того, что я читал. Ваш код сохранил \r\n\ в виде текста, и ваш ожидаемый ответ не должен их отображать, поэтому вам нужно выполнить следующую команду:

x.gsub(/[\\r\\n]/,'')

потому что \ используется с r и n для определения других символов, поэтому вам сначала нужно отказаться от него, сначала \\ показывает символ \.

  • \\n означает строку "\n"
  • \n означает новую строку
person OMY    schedule 11.07.2016
comment
Починил это. Спасибо :) - person Hayz; 11.07.2016