J'ai une chaîne non approuvée que je souhaite afficher sous forme de texte dans une page HTML. J'ai besoin d'échapper aux caractères ' <
' et '&
» en tant qu'entités HTML. Moins il y a de bruit, mieux c'est.
J'utilise UTF8 et je n'ai pas besoin d'autres entités pour les lettres accentuées.
Existe-t-il une fonction intégrée dans Ruby ou Rails, ou devrais-je utiliser la mienne?
&<>"'/
Réponses:
La
h
méthode d'assistance:la source
h
est un alias pourhtml_escape
Consultez la classe Ruby CGI . Il existe des méthodes pour encoder et décoder le HTML ainsi que les URL.
la source
Dans Ruby on Rails 3, le HTML sera échappé par défaut.
Pour les chaînes non échappées, utilisez:
la source
ERB :: Util.html_escape peut être utilisé n'importe où. Il est disponible sans utilisation
require
dans Rails.la source
CGI.escapeHTML
dessousUn ajout à la réponse de Christopher Bradford pour utiliser l'échappement HTML n'importe où, puisque la plupart des gens ne l'utilisent pas de
CGI
nos jours, vous pouvez également utiliserRack
:la source
Vous pouvez utiliser soit
h()
ouhtml_escape()
, mais la plupart des gens utilisenth()
par convention.h()
est l'abréviation dehtml_escape()
in rails.Dans votre contrôleur:
À votre avis:
Si vous affichez la source HTML: vous verrez la sortie sans réellement mettre les données en gras. C'est-à-dire qu'il est codé comme
<b>Hello World!</b>
.Il apparaîtra et sera affiché comme
<b>Hello World!</b>
la source
Comparaison des différentes méthodes:
J'ai écrit le mien pour être compatible avec l'échappement Rails ActiveMailer:
la source
h()
est également utile pour échapper des guillemets.Par exemple, j'ai une vue qui génère un lien à l'aide d'un champ de texte
result[r].thtitle
. Le texte peut inclure des guillemets simples. Si je ne m'échappais pasresult[r].thtitle
dans la méthode de confirmation, le Javascript se briserait:Remarque: la
:html
déclaration de titre est magiquement échappée par Rails.la source