Mam niezaufany ciąg, który chcę pokazać jako tekst na stronie HTML. Muszę usunąć znaki „ <
” i „ &
” jako jednostki HTML. Im mniej zamieszania, tym lepiej.
Używam UTF8 i nie potrzebuję innych jednostek dla liter akcentowanych.
Czy jest wbudowana funkcja w Rubim lub Railsach, czy powinienem włączyć własną?
&<>"'/
Odpowiedzi:
Metoda
h
pomocnicza:źródło
h
jest alias dlahtml_escape
Sprawdź klasę Ruby CGI . Istnieją metody kodowania i dekodowania HTML, a także adresów URL.
źródło
W Ruby on Rails 3 kod HTML zostanie domyślnie usunięty.
W przypadku ciągów bez ucieczki użyj:
źródło
ERB :: Util.html_escape może być używany wszędzie. Jest dostępny bez użycia
require
w Railsach.źródło
CGI.escapeHTML
pod spodemJako dodatek do odpowiedzi Christophera Bradforda, aby używać znaków ucieczki HTML w dowolnym miejscu, ponieważ większość ludzi nie używa
CGI
obecnie, możesz również użyćRack
:źródło
Możesz użyć albo
h()
albohtml_escape()
, ale większość ludzi używah()
konwencji.h()
to skrót odhtml_escape()
in rails.W kontrolerze:
Twoim zdaniem:
Jeśli przeglądasz źródło HTML: zobaczysz wynik bez faktycznego pogrubienia danych. To znaczy jest zakodowany jako
<b>Hello World!</b>
.Pojawi się i zostanie wyświetlony jako
<b>Hello World!</b>
źródło
Porównanie różnych metod:
Napisałem własny, aby był kompatybilny z ucieczką Rails ActiveMailer:
źródło
h()
przydaje się również do zmiany cudzysłowów.Na przykład mam widok, który generuje łącze za pomocą pola tekstowego
result[r].thtitle
. Tekst może zawierać pojedyncze cudzysłowy. Gdybym nie uciekłresult[r].thtitle
w metodzie potwierdzającej, JavaScript się zepsuł:Uwaga:
:html
deklaracja tytułu jest magicznie chroniona przez Railsy.źródło