2010-04-26 9 views
1

Je ne suis pas capable de montrer correctement ce caractère sur mes pages web. J'utilise le jeu de caractères UTF-8 pour cette page, dois-je utiliser ISO-8859-2? J'obtiens ceci une chaîne avec ce char d'un db et là-dessus, c'est enregistré comme ě. Mon navigateur affiche uniquement le tag html.czech char 'ě' sur le script de page php

C'est le seul caractère (en ce moment) que je ne peux pas montrer sur ma page Web. J'ai regardé le http://www.czech.cz et ils utilisent UTF-8.

des suggestions?

faites attention! Andrea

+0

Que diriez-vous d'un lien vers votre page? –

+0

http://www.fornacigrigolin.it/cz/ProdottiFamiglia.php?id_cat=2 –

Répondre

1

Voyez-vous le ě dans le navigateur ou lorsque vous affichez la source? Si vous le voyez dans le navigateur, il est probablement double-codé quelque part - tout ce qui sort de la page est probablement détecté comme HTML non codé et essaie de vous protéger contre une sorte d'injection HTML. Vous voulez le faire ne pas le faire. Mais vous avez un problème encore plus profond. Si votre page est affichée en UTF-8 et que vos données sont en UTF-8, il n'y a aucune raison de les transformer en une entité HTML. Vous devriez passer par les données UTF-8. Vous devez pas besoin de passer à un codage de caractères différent.

+0

C'est mon navigateur qui ne peut pas traduire le code '&@ 283;'. Il y a aussi un problème. J'ai une page admin à télécharger sur db la chaîne, et avant la mise à jour sur db, j'appelle $ text = htmlentities ($ text, ENT_QUOTES) ;. Pour toutes les autres langues tout est correct, mais pas pour ce char ..... –

+1

Utilisez 'htmlspecialchars' ** pas **' htmlentities'. 'htmlentities' essaye d'encoder tous les caractères non-ASCII, ce qui est inutile et les corrompra si vous ne lui dites pas le bon jeu de caractères. Il est par défaut de vieux ISO-8859-1 méchant. – bobince

1

Tout d'abord, oui, vous devriez vraiment utiliser UTF-8. Mais cela ne signifie pas que les données que vous avez sont déjà codées en UTF-8. Deuxièmement, il semble que ce caractère est codé en HTML dans la base de données déjà C'est un problème, car il semble que quelle que soit la page qui affiche ce caractère aussi essaie de coder le contenu HTML aussi. Voici un exemple de ce dont je parle.

données de l'utilisateur: ě
données HTML codé (via htmlentities()) avant d'entrer dans DB: ě
Les données stockées dans la DB: ě
données extraites de DB: ě
HTML données codées avant d'être imprimé à la page: ě
données vu dans le navigateur: ě

voyez-vous cela? Le caractère devient codé en double, de sorte qu'à la deuxième étape de codage, le caractère esperluette est converti en une entité elle-même.

C'est le problème avec les données de codage HTML avant de les stocker dans la base de données. Cela ne devrait être fait avant d'afficher le contenu, pas avant le stockage.

+0

Vous êtes l'homme! C'est exactement le problème ..... Donc, je dois supprimer le htmlentities() avant dong dans DB, est-ce? –

+0

Mais ce n'est pas si clair pourquoi sur db j'ai cette "Vrchn & iacute; om & iacute; tky un vyrovn & aacute; vac & ia." et il est correctement affiché sur mon navigateur ... –

+0

Vous devez utiliser 'htmlspecialchars' lors de la sortie du texte dans la page HTML, et' htmlentities' jamais. Ne pas HTML-échapper le contenu entrant dans la base de données. – bobince