eu tenho
@str = "<b>Hi</b>"
e na minha visão erb:
<%= @str %>
O que será exibido na página é: <b>Hi</b>
quando o que realmente quero é oi . Qual é a maneira ruby de "interpretar" uma string como marcação HTML?
Edit : o caso em que
@str = "<span class=\"classname\">hello</span>"
Se, na minha opinião, eu faço
<%raw @str %>
O código-fonte HTML é <span class=\"classname\">hello</span
onde está o que realmente quero <span class="classname">hello</span>
(sem as barras invertidas que estavam escapando das aspas duplas). Qual é a melhor maneira de "retirar" essas aspas duplas?
html
ruby-on-rails
ruby
string
Tim
fonte
fonte
%Q["quotation marks"] => "\"quotation marks\""
Fonte: en.wikibooks.org/wiki/Ruby_Programming/Syntax/… Não sei se isso ajuda.Respostas:
ATUALIZAR
Por motivos de segurança, é recomendável usar em
sanitize
vez dehtml_safe
. LigaçãoO que está acontecendo é que, como medida de segurança, o Rails está escapando da sua string para você, pois pode ter um código malicioso incorporado. Mas se você disser ao Rails que sua string é
html_safe
, ela passará direto.OU
Usar
raw
funciona bem, mas tudo o que está fazendo é converter a string em uma string e chamar html_safe. Quando sei que tenho uma string, prefiro chamar html_safe diretamente, porque pula uma etapa desnecessária e torna mais claro o que está acontecendo. Detalhes sobre escape de cadeia e proteção XSS estão neste Asciicast .fonte
raw
. Muito feliz em saber sobre isso!Use cru :
Mas como @ jmort253 diz corretamente, considere onde o HTML realmente pertence.
fonte
Se você
rails
usa Erubis - a maneira mais legal de fazer isso éObserve o sinal de igual duplo. Consulte a pergunta relacionada no SO para obter mais informações.
fonte
Você também pode usar o
simple_format(@str)
que remove o código malicioso. Leia mais aqui: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatfonte
Você está misturando sua lógica de negócios com seu conteúdo. Em vez disso, recomendo enviar os dados para sua página e, em seguida, usar algo como JQuery para colocar os dados onde você precisa.
Isso tem a vantagem de manter todo o seu HTML nas páginas HTML onde ele pertence, para que seus web designers possam modificá-lo posteriormente sem precisar passar pelo código do servidor.
Ou, se você não quiser usar JavaScript, tente o seguinte:
Pelo menos dessa maneira, seu HTML está na página HTML a que pertence.
fonte
Ou você pode tentar o método CGI.unescapeHTML .
fonte
desde que você está traduzindo e escolhendo o código desejado do arquivo codificado de baixa qualidade de uma pessoa, você pode usar content_tag, em combinação com o seu regex.
Roubando os documentos da API, você pode interpolar esse código traduzido para algo
content_tag
como:Sem conhecer seu código, esse tipo de pensamento garantirá que o código traduzido seja muito compatível.
fonte
Solução: use aspas duplas dentro de aspas simples (ou simples dentro de aspas duplas) para evitar escapar com uma barra invertida.
fonte
A versão html_safe funciona bem no Rails 4 ...
fonte