163 votes

Ruby on Rails : comment restituer une chaîne au format HTML ?

J'ai

@str = "<b>Hi</b>"

et dans mon erb vue:

<%= @str %>

Ce qui va s'afficher sur la page est: <b>Hi</b> quand ce que je veux vraiment, c'est Hi. Quel est le rubis de façon à "interpréter" une chaîne de caractères comme une balise HTML?


Edit: au cas où

@str = "<span class=\"classname\">hello</span>"

Si de mon point de vue je ne

<%raw @str %>

Le code source HTML est - <span class=\"classname\">hello</span> d'où ce que je veux vraiment est - <span class="classname">hello</span> (sans les barres obliques inverses qui ont été s'échapper les guillemets). Quelle est la meilleure façon de "ne pas encoder" ces guillemets?

343voto

Jacob Points 1861

Ce qui se passe est que, en tant que mesure de sécurité, les Rails s'échappe à votre chaîne pour vous, car il pourrait avoir un code malveillant qui y est incorporé. Mais si vous dites Rails que votre chaîne est - html_safe, ça va passer à travers.

@str = "<b>Hi</b>".html_safe
<%= @str %>

OU

@str = "<b>Hi</b>"
<%= @str.html_safe %>

À l'aide de raw fonctionne très bien, mais tout ce qu'il fait c'est de la conversion de la chaîne en chaîne, et puis l'appel de html_safe. Quand je sais que j'ai une chaîne, je préfère les appeler html_safe directement, parce qu'il saute une étape inutile et rend plus claire de ce qui se passe. Détails sur chaîne de l'évasion et de la protection XSS sont dans ce Asciicast.

16voto

Michael Stum Points 72046

Utiliser le raw:

Mais comme le dit bien jmort253, considérer où le HTML appartient vraiment.

16voto

jibiel Points 2162

Si vous êtes sur `` qui utilise Erubis - le plus cool de le faire consiste

Notez le double signe égal. Voir question connexe sur SO pour plus d’informations.

8voto

bcackerman Points 378

Vous pouvez également utiliser `` qui supprime tout le code malveillant. Lire la suite ici : http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

7voto

jmort253 Points 16929

Vous mélangez votre logique métier avec votre contenu. Au lieu de cela, je vous recommande d'envoyer les données de votre page, puis en utilisant quelque chose comme JQuery pour placer les données où vous devez aller.

Ceci a l'avantage de garder tous vos fichiers HTML dans le code HTML des pages où il appartient donc votre web les concepteurs peuvent modifier le HTML sans avoir à verser par le biais de code côté serveur.

Ou si vous n'êtes pas désireux de l'utilisation de JavaScript, vous pouvez essayer ceci:

@str = "Hi"

<b><%= @str ></b>

Au moins de cette façon, votre HTML est dans le code HTML de la page où il appartient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X