Rails HTML кодирование - PullRequest
       10

Rails HTML кодирование

1 голос
/ 16 декабря 2009

Я использую h вспомогательный метод в Rails для кодирования / экранирования строки, содержащей апостроф ('). На мой взгляд, я использую его следующим образом

<%=h "Mike's computer" %>

Насколько я понимаю, html при просмотре источника должен быть Mike% 27s computer , но созданный html содержит апостроф Mike's computer

Я что-то упускаю из виду?

Как получить желаемый результат Mike% 27s computer ?

Помощь всегда ценится.

Ответы [ 3 ]

5 голосов
/ 22 октября 2010

Если вы хотите закодировать URL, используйте u helper:

>> fer@:~/$ script/console
Loading development environment (Rails 2.3.8)
>> include ERB::Util
=> Object
>> h "Mike's computer"
=> "Mike's computer"
>> u "Mike's computer"
=> "Mike%27s%20computer"
>> 
5 голосов
/ 16 декабря 2009

Апостроф является допустимым символом в HTML. Он не закодирован, потому что его не нужно кодировать.

1 голос
/ 16 декабря 2009

Если мы посмотрим на исходный код метода h (это псевдоним html_escape), то нетрудно просто открыть файл и добавить одинарную кавычку (') к константе HTML_ESCAPE в файле.

Ниже приведен исходный код метода с указанием местоположения метода в файле. Найдите константу и и в кавычке. Вы можете даже добавить больше вещей внутрь, как хотите.

HTML_ESCAPE = { '&' => '&amp;', '>' => '&gt;', '<' => '&lt;', '"' => '&quot;' }

File actionpack/lib/action_view/template_handlers/erb.rb, line 17
17:     def html_escape(s)
18:       s.to_s.gsub(/[&"><]/) { |special| HTML_ESCAPE[special] }
19:     end

CAVEAT: эта модификация затронет все проекты, которые используют библиотеку.

ИЛИ альтернативой будет создание вспомогательного метода представления, скажем, в ApplicationHelper

def h_with_quote(s)
  HTML_ESCAPE = { "'" => "%27"}
  h(s).gsub(/[']/) {|special| HTML_ESCAPE[special]}
end

Такой подход должен быть более безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...