Rails экранирует только определенные разделы контента - PullRequest
0 голосов
/ 29 ноября 2011

Я хочу превратить все слова, начинающиеся с символа # (т. Е. #Stackoverflow), в ссылку, которая при переходе по ссылке приведет к ссылке на страницу поиска со словом в качестве запроса.

Я пробовал это недавнои получил верный правильный HTML, но поскольку контент автоматически экранировался, он показывался как:

This is some content <a href="search?q=something">something</a>

Мой вопрос: есть ли способ применить html_safe только к каждой части контента, кроме этих ссылок?

1 Ответ

1 голос
/ 30 ноября 2011

Если ваши теги представляют собой простые буквенно-цифровые строки (то есть ничего, что не должно быть в кодировке HTML или URL), то вы можете сделать что-то вроде этого:

s = ERB::Util.html_escape(text_to_be_linkified).gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe

Тогда s.html_safe? будет истинным и <%= ... %> будет передавать результат как есть.Если вы поместите это в помощник вида, вам не понадобится префикс ERB::Util. для html_escape.Если вам нужно беспокоиться о кодировке URL или HTML, вы можете соответствующим образом изменить строку замены gsub.

Например:

> s = ERB::Util.html_escape('<pancakes & #things').gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe
> puts s.html_safe?
true
> puts s
&lt;pancakes &amp; <a href="search?q=things">things</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...