Caractères accentués dans la table mySQL
J'ai quelques textes en français (contenant des caractères accentués tels que "é"), stockés dans une table MySQL dont le classement est utf8_unicode_ci (la table et les colonnes), que j'ai envie de sortie sur une page HTML5.
La page HTML charset UTF-8 (< meta charset="utf-8" />) et les fichiers PHP sont eux-mêmes codés comme "UTF-8 sans BOM" (j'utilise Notepad++ sous Windows). J'utilise PHP5 à la demande de la base de données et générer le code HTML.
Toutefois, sur la page de sortie, les caractères spéciaux (tels que "é") apparaissent tronqués et sont remplacés par des "�".
Quand je navigue dans la base de données (via phpMyAdmin) de ces mêmes caractères accentués affichage de l'amende juste.
Ce qui me manque ici?
(Remarque: la modification du codage de la page (via Firefox "développeur web" menu) à la norme ISO-8859-1 résout le problème... sauf pour les caractères spéciaux qui apparaissent directement dans les fichiers PHP, qui deviennent désormais corrompu. Mais de toute façon, je préfère comprendre pourquoi cela ne fonctionne pas comme UTF-8 que de changer l'encodage sans comprendre pourquoi il fonctionne. ^^;)
source d'informationauteur s427
Vous devez vous connecter pour publier un commentaire.
Je l'ai vécu le même problème avant, et ce que j'ai fait sont les suivantes
1) l'Utilisation de notepad++(peut presque s'adapter sur n'importe quel encodage) ou eclipse et être sûr de l'enregistrer ou l'ouvrir en UTF-8 sans BOM.
2) définir le codage en PHP en-tête, à l'aide de
header('Content-type: text/html; charset=UTF-8');
3) supprimer les espaces supplémentaires sur le début et la fin de mes fichiers PHP.
4) placé toute ma table et les colonnes de l'encodage
utf8mb4_general_ci
ouutf8mb4_unicode_ci
via PhpMyAdmin ou tout client mySQL que vous avez. Une comparaison des deux codages sont disponibles ici5) set de connexion mysql charset en UTF-8 (j'utilise PDO pour ma connexion de base de données )
ou tout simplement exécuter les requêtes SQL avant de l'extraction de toutes les données
6) utiliser une balise meta
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7) utiliser un certain code de langue pour le français
<meta http-equiv="Content-language" content="fr" />
8) de modifier le html de l'élément de l'attribut lang de la langue souhaitée
et sera mise à jour de cette plus parce que j'ai vraiment eu un moment difficile la résolution de ce problème avant parce que j'avais affaire avec des caractères Japonais dans mes projets passés,
9) Certaines polices ne sont pas disponibles dans le PC client, vous devez utiliser Google polices pour l'inclure dans votre CSS
10) N'est pas la fin de votre fichier source avec
?>
REMARQUE:
mais si tout ce que j'ai dit ci-dessus ne fonctionne pas, essayez d'ajuster votre encodage en fonction du jeu de caractères que vous voulez vraiment pour afficher, pour moi j'ai mis tout à
SHIFT-JIS
pour afficher tous mes caractères japonais et il fonctionne vraiment bien. Mais à l'aide deUFT-8
doit être votre prioritéCela fonctionne pour moi
utf8_general_ci
UTF-8 without BOM
$mysqli->query('SET NAMES utf8');
après la connexion à la base de données dans votre fichier PHP< meta charset="utf-8" />
dans votre HTML-sFonctionne parfaitement.
Si votre
php.ini
default_charset
n'est pas configuré en UTF-8, vous devez utiliser unContent-type
à définir vos données. Appliquer les lignes d'en-tête en haut de votre fichier(s) :Si vous avez toujours des problèmes avec l'encodage, la cause peut être l'une des suivantes:
default_encoding
paramètre dans les paramètres.ini)<form>
problème de charset (vérifiez qu'il est envoyé en tant que utf-8)<html>
problème de charset (où aucun enctype est définie dans votre fichier html)Content-encoding:
problème (d'où le mauvais encodage est envoyé par Apache).Nom de l'ENSEMBLE a fonctionné pour moi.
Ma question était dans une de mes pages sur le terrain avec les caractères étrangers ne serait pas d'affichage, sur la production de pages web il n'y a pas de problème.
Coller de la ligne en-dessous dans votre site web, en-tête
header('Content-Type: text/html; charset=utf-8');
Page (fichier) devrait bien paraître.
Si semble bon aller ici pour mysql comportement après (SET_NAMES).
Je sais que vous avez déjà une réponse. C'est très bien. Mais étrangement, aucune de ces réponses a résolu mon problème. J'aimerais partager ma réponse pour le bénéfice des autres, qui peuvent rencontrer les mêmes problèmes.
J'ai également eu les mêmes problèmes que les OP, en ce qui concerne les accents français dans un multi-lingual application.
Mais j'ai rencontré ce problème pour la première fois quand j'ai eu à passer (accentués français) données sous forme de segments dans les appels AJAX.
Oui, nous devons avoir la base de données est mis à travailler avec l'UTF8. Mais le fait que les appels AJAX avait chaînes de requête (dans mon cas, les segments, depuis que j'utilise CodeIgniter), j'ai dû simplement encoder le texte français.
Pour ce faire, sur le côté client, utiliser le Javascript encodeURI() fonction avec vos données.
Et de l'inverser en PHP, il suffit d'utiliser
urldecode($MyStr)
où les données ont été reçues en tant que paramètres.Espère que cette aide.