j'ai
@str = "<b>Hi</b>"
et à mon avis erb:
<%= @str %>
Ce qui s'affichera sur la page est: <b>Hi</b>
quand ce que je veux vraiment, c'est Salut . Quelle est la manière ruby "d'interpréter" une chaîne comme du balisage HTML?
Edit : le cas où
@str = "<span class=\"classname\">hello</span>"
Si à mon avis je fais
<%raw @str %>
Le code source HTML est <span class=\"classname\">hello</span
> là où ce que je veux vraiment <span class="classname">hello</span>
(sans les contre-obliques qui échappaient aux guillemets). Quelle est la meilleure façon de "unescape" ces doubles guillemets?
%Q["quotation marks"] => "\"quotation marks\""
Source: en.wikibooks.org/wiki/Ruby_Programming/Syntax/ ... Je ne sais pas si cela aide.Réponses:
METTRE À JOUR
Pour des raisons de sécurité, il est recommandé d'utiliser à la
sanitize
place dehtml_safe
. LienCe qui se passe, c'est que, par mesure de sécurité, Rails échappe votre chaîne pour vous car il peut contenir du code malveillant. Mais si vous dites à Rails que votre chaîne est
html_safe
, elle la passera à travers.OU
L'utilisation
raw
fonctionne bien, mais tout ce qu'il fait est de convertir la chaîne en chaîne, puis d'appeler html_safe. Quand je sais que j'ai une chaîne, je préfère appeler directement html_safe, car cela saute une étape inutile et clarifie ce qui se passe. Les détails sur l'échappement de chaîne et la protection XSS se trouvent dans cet Asciicast .la source
raw
. Très heureux de savoir à ce sujet!Utiliser brut :
Mais comme @ jmort253 le dit correctement, considérez à quoi appartient vraiment le HTML.
la source
Si vous êtes
rails
qui utilise erubis - le plus cool façon de le faire estNotez le double signe égal. Voir la question relative à SO pour plus d'informations.
la source
Vous pouvez également utiliser
simple_format(@str)
qui supprime le code malveillant. En savoir plus ici: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatla source
Vous mélangez votre logique métier avec votre contenu. Au lieu de cela, je vous recommande d'envoyer les données sur votre page, puis d'utiliser quelque chose comme JQuery pour placer les données là où vous en avez besoin.
Cela a l'avantage de conserver tout votre HTML dans les pages HTML auxquelles il appartient afin que vos concepteurs Web puissent modifier le HTML ultérieurement sans avoir à passer par le code côté serveur.
Ou si vous ne souhaitez pas utiliser JavaScript, vous pouvez essayer ceci:
Au moins de cette façon, votre HTML se trouve dans la page HTML à laquelle il appartient.
la source
Ou vous pouvez essayer la méthode CGI.unescapeHTML .
la source
puisque vous traduisez et choisissez votre code recherché dans le fichier codé de merde d'une personne, pourriez-vous utiliser content_tag, en combinaison avec votre regex.
En volant les documents de l'API, vous pouvez interpoler ce code traduit en un
content_tag
format similaire:Ne connaissant pas votre code, ce genre de réflexion garantira que votre code traduit est trop conforme.
la source
Solution: utilisez des guillemets doubles à l'intérieur de guillemets simples (ou simples à l'intérieur de doubles) pour éviter de s'échapper avec une barre oblique inverse.
la source
La version html_safe fonctionne bien dans Rails 4 ...
la source