web-dev-qa-db-fra.com

Caractères étranges apparaissant sur des sites Web - ASCII? - UNICODE?

J'ai créé de nombreux sites Web très simples en HTML pur au fil des ans. La plupart d'entre eux semblent bien fonctionner la plupart du temps. Mais il y a un problème récurrent que je n'ai jamais vraiment résolu avec des personnages étranges.

Le scénario va comme ceci: je crée le site. Je le regarde dans mon navigateur, tout semble aller bien. Je vais peut-être l'examiner plusieurs fois au cours des semaines ou des mois à venir, au fur et à mesure que je ferai des ajouts ici et là. Peut-être sur une variété de navigateurs sur une variété de PC. Puis un jour, je regarde la page et vois une dispersion aléatoire de points d’interrogation blancs sur des formes de diamants sombres. Celles-ci peuvent apparaître là où je m'attendais à voir des traits d'union, des citations ou des apostrophes. Ma pensée immédiate est que mon navigateur est entré dans un état étrange parce que je regardais un site Web étranger avec des caractères étranges, mais je ne suis jamais tout à fait sûr. Je reste avec cette impression lancinante que peut-être la moitié de la planète voit mon site Web avec des points d'interrogation amusants.

Donc ma question est ce qui se passe? Que dois-je faire pour que le plus grand nombre de personnes possible dans le monde entier puisse voir mon texte comme je l'avais initialement prévu? Devrais-je utiliser ces séquences HTML spéciales comme

£

pour tous les caractères non alphanumériques? Devrais-je m'inquiéter du tout?

Edit: Pour l'instant, le problème se pose sur cette page: http://www.fullreservebanking.com/papers.htm = ... une partie de celle-ci ressemble à ceci:

enter image description here

J'utilise FireFox 5 et le codage des caractères semble être "UNICODE (UTF-8)". Je ne me souviens pas d’avoir défini manuellement le codage de caractères depuis l’installation. Je regarde occasionnellement les sites Web japonais pour des raisons liées au travail - bien que, lorsque je le fais, je ne modifie pas manuellement les paramètres de Firefox.

Edit: Maintenant corrigé. Page Web modifiée en conséquence.

3
Mick

Celles-ci sont appelées gremlins et sont généralement causées par le fait que le programme qui met les guillemets utilise les guillemets jolis/bouclés/intelligents au lieu des entités HTML appropriées. Les polices ne s'affichent pas correctement ou ne contiennent pas ces caractères et ont plutôt généré le symbole amusant.

Voir cet article formidable de A List Apart sur les anomalies typographiques non liées aux citations en HTML.

La meilleure chose à faire est de créer un traitement de texte qui parcourt le contenu de votre page Web avant qu'il ne soit envoyé à l'utilisateur (en fait, il est préférable de l'exécuter après que le contenu est généré et avant qu'il ne soit enregistré sur le serveur). Ce processeur remplacera simplement ces caractères spéciaux par un texte et fournira l’entité HTML appropriée à sa place.

Cette page du manuel PHP est donnée donne d'excellents exemples de code en PHP.

7
dmsnell

la réponse de dmsnell à propos de l'utilisation d'entités HTML est correcte, mais ce problème peut généralement être résolu en s'assurant que vous utilisez le bon UTF-8 tout au long de la génération et de la diffusion des pages par les utilisateurs.

Par exemple, si vos données sont stockées dans une base de données, assurez-vous que tous les champs de texte utilisent le codage UTF-8. Vous devez également définir le jeu de caractères lors de la connexion à la base de données (si vous utilisez PDO en PHP) ou exécuter une requête SET NAMES utf8 après la connexion, avant de commencer à extraire des données.

PHP gère très bien UTF-8 si vous ne modifiez pas de chaînes. Si tel est le cas, vous devrez vous pencher sur l’utilisation de ses fonctions multi-octets mb_*.

Sur la page elle-même, ajoutez la balise méta du type de contenu. Cela devrait aller juste après la balise d'ouverture <head>.

<meta charset="utf-8">

Vous pouvez également définir cela comme un en-tête HTTP à la place.

7
DisgruntledGoat

En d'autres termes, si vous êtes dans WordPress et HTML5, ne copiez que les caractères codés en utf-8 appropriés et le problème est résolu. Il suffit de Google "liste de caractères utf-8" et copier directement de votre navigateur à votre éditeur (en mode visuel). Alors le point d'interrogation? n'apparaîtra pas comme

1
Tim Helmer