J'ai un serveur de sauvegarde qui sauvegarde automatiquement mon site en direct, les fichiers et la base de données.
Sur le site en direct, le texte semble correct, mais lorsque vous affichez sa version miroir, il affiche "?" dans une partie du texte. Ce texte est stocké dans la table de la base de données d'actualités.
Voici une capture d'écran de celui-ci sur le serveur en direct et de celui-ci sur le serveur en miroir.
Que pourrait-il se passer pendant le processus de sauvegarde sur le serveur en miroir?
Les articles suivants vous seront utiles
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
Après vous être connecté à la base de données, exécutez la commande suivante:
SET NAMES 'utf8';
Assurez-vous que votre page Web utilise également l'encodage UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
PHP propose également plusieurs fonctions qui seront utiles pour les conversions:
Modifiez votre fichier de configuration Apache sur le serveur "miroir" (le serveur avec le problème) et commentez la ligne suivante:
AddDefaultCharset UTF-8
Redémarrez ensuite Apache:
service httpd restart
Le problème est que la ligne "AddDefaultCharset UTF-8" remplace le Content-Type spécifié dans les fichiers .html; par exemple.:
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
Le symptôme le plus courant est que les codes de caractères supérieurs à 127 s'affichent sous forme de losanges noirs avec des points d'interrogation (dans Chrome, Safari ou Firefox), ou sous forme de petites cases (dans IE et Opera). Fichiers HTML générés par Microsoft Word ont généralement beaucoup de ces caractères, le plus courant étant le code de caractère 160 = 0xA0, qui équivaut à "nbsp;" dans le codage Windows-1252, et se trouve souvent entre les balises span, comme ceci:
<span style="mso-spacerun: yes">ááá </span>
Je suis arrivé ici à la recherche d'une solution pour JavaScript affichée dans le navigateur et bien qu'elle ne soit pas directement liée à une base de données ...
Dans mon cas, j'ai copié et collé du texte trouvé sur Internet dans un fichier JavaScript et l'ai enregistré avec le Bloc-notes Windows.
Lorsque la page qui utilise ce fichier JavaScript affiche les chaînes, il y avait des points d'interrogation (comme ceux montrés dans la question) au lieu des caractères spéciaux comme les lettres accentuées, etc.
J'ai ouvert le fichier en utilisant Notepad++
. Juste après avoir ouvert le fichier, j'ai vu que l'encodage des caractères était défini comme ANSI
comme vous pouvez le voir (curseur de la souris sur le pied de page) dans la capture d'écran suivante:
Pour résoudre le problème, cliquez sur le menu Encoding
dans Notepad++
et sélectionnez Encode in UTF-8
. Vous devriez être prêt à partir. :)
Votre navigateur n'a pas interprété correctement l'encodage de la page (soit parce que vous l'avez forcé à un paramètre particulier, soit parce que la page n'est pas définie correctement), et ne peut donc pas afficher certains des caractères.
Cela va être lié aux encodages de caractères.
Êtes-vous sûr que le site en miroir possède les mêmes propriétés en ce qui concerne les encodages de caractères que votre serveur principal?
Selon le type de serveur dont vous disposez, il peut s'agir d'une propriété du processus serveur lui-même ou d'une variable d'environnement.
Par exemple, s'il s'agit d'un environnement UNIX, essayez peut-être de comparer LANG ou LC_ALL?
Voir aussi ici
Unicode ou autres caractères de jeu de caractères tombant?
J'ai vu des caractères "étranges" similaires apparaître sur des sites sur lesquels j'ai souvent travaillé lorsque le texte est copié à partir d'un e-mail ou d'un autre format de document (par exemple Word) dans un éditeur de texte. L'éditeur peut afficher les caractères non ASCII mais pas le navigateur. Pour le site Web, je suggère de rechercher le code d'entité HTML pour le caractère et de l'insérer à la place ... ou de passer à plus standard.
Vérifiez le jeu de caractères émis par votre serveur en miroir. Il semble y avoir une différence par rapport au serveur principal - le site en direct semble produire Unicode, où le miroir n'est pas. En outre, c'est généralement une bonne idée de nettoyer les caractères Unicode dans votre contenu entrant et de les remplacer par leurs entités HTML appropriées.
Votre problème spécifique concerne les "guillemets intelligents", "les tirets em" et "les tirets en". Je sais que vous pouvez remplacer les tirets par —
et n-tirets avec –
(ce qui devrait être fait du côté entrée de votre base de données); Je ne sais pas quel serait le remplacement correct des devis intelligents. (Je remplace généralement toutes les guillemets simples bouclés par 'et tous les guillemets doubles bouclés par "... Les geeks de typographie peuvent se sentir libres de me tirer dessus à vue.)
Je dois noter que certains navigateurs sont plus indulgents que d'autres avec ce problème - Internet Explorer sur Windows a tendance à détecter et à "corriger" automatiquement ce problème; Firefox et la plupart des autres navigateurs affichent les points d'interrogation.