2009-09-26 7 views
1

Pour une raison quelconque, l'échappement html ne fonctionne pas dans mon application Rails. Même si j'écris quelque chose commeRails: html_escape ne fonctionne pas

<%=h '©äö' %> 

il ne convertit pas l'un des personnages à des entités HTML.

Je n'ai aucune idée de ce que cela pourrait être. Cela fonctionnait toujours bien et maintenant tout à coup, ça ne marche pas.

Des idées?

+0

Pourrait-elle être liée à votre type de encodage de document? –

+0

J'ai essayé de passer de l'UTF-8 à l'ISO-8859-1 mais cela n'a pas aidé. – Mato

Répondre

1

Google sitemap requires fully escaped URLs, donc dans ce Si vous avez besoin d'échapper à tous les caractères spéciaux et internationaux

Ce htmlentities library fait pour vous

J'ai même écrit un petit emballage dans le application_helper.rb:..

def html_entity_escape(s) 
    require 'htmlentities' 
    @html_coder ||= HTMLEntities.new 
    @html_coder.encode(s) 
end 
+1

'HTMLEntities.new.encode (" © äöá ",: named)' J'ai fait ça pour t'échapper aussi, merci pour le conseil de cette gemme. –

8

ö et ä sont des caractères valides en HTML. Il n'y a pas besoin de leur échapper, même s'il y a des entités HTML pour eux. Ces entités sont la commodité, pas la nécessité - tant que le codage déclaré (en-têtes HTTP) et le codage de caractères réels correspondent, il n'y a pas de problème s'ils se produisent littéralement.

Les seuls caractères qui doivent toujours être échappées sont <, >, & et ", comme en XML.

+0

OK, ne savait pas que seulement <, >, & et "sont échappés parce que dans d'autres langues ce genre de fonctions échappe habituellement à tous les caractères qui ont une entité HTML équivalente.Y at-il un moyen de le faire dans Rails? – Mato

+3

Whydo vous voulez que ? Cela ne donnerait aucun avantage, augmenter la taille de la source HTML et est une douleur dans le ** pour les personnes qui veulent travailler avec le code source HTML pour une raison quelconque.Je préfèrerais les caractères réels dans le code source chaque fois que possible, je pense que Rails fait la bonne chose – Tomalak

2

Je dirais que h ne remplace que les caractères spéciaux HTML <,>, & et ». S'il vous plaît jeter un oeil sur la documentation des rails de ERB::Util.html_escape qui se cache derrière la fonction h.