mam
@str = "<b>Hi</b>"
i moim zdaniem:
<%= @str %>
Na stronie zostanie wyświetlone: <b>Hi</b>
kiedy naprawdę chcę, to Cześć . W jaki sposób ruby „interpretuje” ciąg znaków jako znaczniki HTML?
Edycja : przypadek, w którym
@str = "<span class=\"classname\">hello</span>"
Jeśli moim zdaniem tak
<%raw @str %>
Kod źródłowy HTML jest <span class=\"classname\">hello</span
> tam, gdzie naprawdę chcę <span class="classname">hello</span>
(bez ukośników odwrotnych przed podwójnymi cudzysłowami). Jaki jest najlepszy sposób na „odskoczenie” tych podwójnych cudzysłowów?
%Q["quotation marks"] => "\"quotation marks\""
Źródło: en.wikibooks.org/wiki/Ruby_Programming/Syntax/… Nie wiem, czy to pomaga.Odpowiedzi:
AKTUALIZACJA
Ze względów bezpieczeństwa zaleca się używanie
sanitize
zamiasthtml_safe
. PołączyćDzieje się tak, że ze względów bezpieczeństwa Railsy uciekają przed twoim ciągiem znaków, ponieważ może on zawierać osadzony w nim złośliwy kod. Ale jeśli powiesz Railsom, że twój łańcuch jest
html_safe
, to przepuści go od razu.LUB
Używanie
raw
działa dobrze, ale wszystko, co robi, to konwertowanie ciągu na ciąg, a następnie wywołanie html_safe. Kiedy wiem, że mam ciąg, wolę wywoływać bezpośrednio html_safe, ponieważ pomija niepotrzebny krok i wyjaśnia, co się dzieje. Szczegóły dotyczące ucieczki ciągów i ochrony XSS znajdują się w tym Asciicast .źródło
raw
. Bardzo się cieszę, że o tym wiem!Użyj surowego :
Ale jak słusznie mówi @ jmort253, zastanów się, gdzie naprawdę należy HTML.
źródło
Jeśli
rails
korzystasz z Erubisa - najfajniejszy sposób to zrobićZwróć uwagę na podwójny znak równości. Aby uzyskać więcej informacji, zobacz powiązane pytanie na SO.
źródło
Możesz także użyć,
simple_format(@str)
który usuwa złośliwy kod. Przeczytaj więcej tutaj: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatźródło
Mieszasz logikę biznesową z zawartością. Zamiast tego zalecałbym wysłanie danych na twoją stronę, a następnie użycie czegoś takiego jak JQuery, aby umieścić dane tam, gdzie są potrzebne.
Ma to tę zaletę, że cały kod HTML pozostaje na stronach HTML, do których należy, dzięki czemu projektanci stron internetowych mogą później modyfikować kod HTML bez konieczności przepuszczania kodu po stronie serwera.
A jeśli nie chcesz używać JavaScript, możesz spróbować tego:
Przynajmniej w ten sposób twój HTML będzie na stronie HTML, do której należy.
źródło
Lub możesz wypróbować metodę CGI.unescapeHTML .
źródło
ponieważ tłumaczysz i wybierasz pożądany kod z kiepskiego zakodowanego pliku danej osoby, czy mógłbyś użyć content_tag w połączeniu ze swoim wyrażeniem regularnym.
Kradnąc z dokumentów API, można interpolować ten przetłumaczony kod na
content_tag
podobny do:Nie znając swojego kodu, tego rodzaju myślenie sprawi, że przetłumaczony kod będzie zbyt zgodny.
źródło
Rozwiązanie: użyj podwójnych cudzysłowów wewnątrz pojedynczych cudzysłowów (lub pojedynczego wewnątrz podwójnego cudzysłowu), aby uniknąć znaków ucieczki z ukośnikiem odwrotnym.
źródło
Wersja html_safe działa dobrze w Railsach 4 ...
źródło