Latin-1 / l'encodage UTF-8 php
J'ai une base de données en UTF-8 avec un mélange de Latin-1. (Je pense que c'est ça le problème)
C'est la façon dont les personnages regarder dans la base de données.
Ä° (should be İ)
è
Quand j'ai la tête à
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
Puis les personnages sortent comme:
İ
�
Quand j'enlève l'en-tête, ils sortent comme ils le sont dans la base de données. Je veux qu'ils sortent comme ceci:
İ
è
Je suis à la recherche d'un moyen de remédier à cela en PHP après le fait, si c'est possible. Je suis incapable de corriger les données lui-même à ce moment, ce qui serait la bonne chose à faire.
- Comment pouvez-vous avoir deux codages différents dans une table db?
- Vous devez choisir un codage et de s'y tenir. Vous ne pouvez pas sortir d'un mélange de jeux de caractères. Personnellement, je dirais le droit de réponse ici est de convertir l'ensemble de votre base de données Unicode et être fait avec elle. Si vous ne pouvez pas le faire pour quelque raison que ce soit, vous aurez besoin de convertir les chaînes de caractères à un codage unique avant la sortie sur la page, et de déclarer que le codage de la page. Encore une fois, je vous recommande de choisir Unicode pour votre sortie de jeu de caractères.
- Je suis d'accord avec @DaveRandom. Vous pouvez ajouter une nouvelle colonne qui indique l'encodage à utiliser. Toutefois, pour remplir cette colonne, vous devez le faire manuellement (ou au moins vérifier manuellement).
- Avez-vous mis l'Encodage UTF-8 lorsque vous avez ajouté les données de formulaire en db?
- Lecture recommandée: kunststube.net/encoding kunststube.net/frontback
- Il y a beaucoup de choses à configurer pour utiliser UTF-8. Le
<meta>
balise est peut-être le plus hors de propos. Exactement comment avez-vous vérifier que le contenu réel de la bd? Êtes-vous à l'aide d'un client MySQL comme établi ou HeidiSQL? - Workbench
- Alors, si
İ
est stockée en tant queÄ°
, vous avez probablement oublié de paramétrer la connexion d'encodage quelle que soit votre classe DB est. Vous devez d'abord vous assurer de magasin les données correctement. L'affichage il s'agit par la suite. Merci de lire la "avant-arrière" lien par DaveRandom. Ä°
est l'ISO-8859-1 représentation de0xC4 0xB0
, qui estİ
si on l'interprète comme de l'UTF-8. En bref, les octets sont à droite, mais l'interprétation est erronée.
Vous devez vous connecter pour publier un commentaire.
Votre sortie HTML doit être dans un codage unique, il n'y a pas moyen de contourner cela. Cela signifie que le contenu dans les différents encodages doit être converti en HTML codage en premier. Tandis que c'est possible de le faire avec
iconv
oumb_convert_encoding
, il y a deux problèmes à résoudre:Par exemple, une solution théorique serait de choisir UTF-8 comme encodage HTML, puis le faire pour toutes les chaînes que vous allez de sortie:
Le code ci-dessus suppose que les non-UTF-8 contenu est encodé en latin-1, ce qui est raisonnable en fonction de votre question.
Peut-être que vous devriez choisir la utf8 comme la connexion jeu de caractères qui permet de récupérer les caractères à droite. La valeur par défaut peut-être pas bon pour vos personnages.
Plus de détails ici mysql_set_charset
Vous devez rassembler 3 choses dans ce cas. Presque n'importe pas quel est l'encodage de caractères de la base de données de la table de contenu, parce que dans MySQL, vous pouvez définir l'encodage de la communication entre le serveur de base de données et votre script PHP. Voir http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
Si vous utilisez des NOMS de jeux /JEU de JEU de CARACTÈRES de la bonne façon, vous pouvez définir la communication comme pour obtenir les caractères UTF-8 de toute façon.
Vous devez cocher la case "physique" (au niveau des octets) de codage des caractères de votre fichier de script PHP. Mis en UTF-8 dans l'éditeur de texte /IDE selon ce que vous utilisez.
Vous devez utiliser le code HTML d'en-tête, vous l'avez écrit correctement ci-dessus.
Si toutes les choses correspondent correctement, le résultat devrait être bon.
Le seul problème possible, lorsque le contenu textuel dans la table DB ont été stockés avec un mauvais char de codage.
Je sais que c'est un vieux post, mais dans le cas où quelque chose vient à travers cette question, voici ce que j'ai fait pour résoudre le problème.
1) exporter une table(s) de sql
2) ouvrez sql avec notepad++ ou un autre éditeur de
3) tout copier puis le coller dans un nouveau fichier avec la NOMENCLATURE (ou le bloc-notes et enregistrez-le comme unicode)
4) j'ai cela sur mon fichier exporté:
que je change le nom du SET de latin1 à utf8
si vous n'avez pas cette ligne juste il suffit d'ajouter cette nouvelle ligne
et à partir de
changement
à
supprimer les anciennes tables (sauvegarde des anciennes tables de cours) et l'importation de ce nouveau fichier.
Il a travaillé pour moi. Espérons que cela aide.