J'ai des textes en français (contenant des caractères accentués tels que "É"), stockés dans une table mysql dont la collation est UTF8_UNICODE_CI (la table et les colonnes), que je souhaite sortir sur une page HTML5.
La page HTML Charset est UTF-8 (<Meta Charset = "utf-8" />) et le PHP Les fichiers eux-mêmes sont codés comme "utf-8 sans bom" (j'utilise Notepad ++ sur Windows). J'utilise PHP5 pour demander la base de données et générer le code HTML.
Cependant, sur la page de sortie, les caractères spéciaux (tels que "É") apparaissent brouillés et sont remplacés par "�".
Lorsque je parcourt la base de données (via phpmyadmin), ces mêmes caractères accentués s'affichent simplement bien.
Qu'est-ce que j'oublie ici?
(Remarque: Modification du codage de la page (via le menu "Développeur Web de Firefox) vers ISO-8859-1 résout le problème ... À l'exception des caractères spéciaux qui apparaissent directement dans les fichiers PHP, qui deviennent maintenant corrompus. Mais de toute façon, je comprendrais pourquoi cela ne fonctionne pas comme UTF-8 que de modifier le codage sans comprendre pourquoi cela fonctionne. ^^;)
J'ai déjà vécu ce même problème et ce que j'ai fait sont les suivants
1) Utilisez NotePad ++ (peut presque s'adapter à tout codage) ou Eclipse et assurez-vous à sauvegardez ou ouvrez-le dans UTF-8 sans bom .
2) Définissez le codage dans PHP en-tête, à l'aide de header('Content-type: text/html; charset=UTF-8');
3) Retirez tous les espaces supplémentaires sur le début et la fin de My PHP fichiers.
4) Définissez toute ma table et toutes mes colonnes codant sur utf8mb4_general_ci
ou utf8mb4_unicode_ci
via phpmyadmin ou tout client MySQL que vous avez. Une comparaison des deux codages est disponible ici
5) Définir la connexion MySQL Charset sur UTF-8 (J'utilise PDO pour ma connexion de base de données)
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
ou juste exécuter les requêtes SQL avant de récupérer les données
6) Utilisez une balise Meta <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7) Utilisez un certain code de langue pour le français <meta http-equiv="Content-language" content="fr" />
8) Modifiez l'attribut HTML Element LANG à la langue souhaitée
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
et mettra à jour cela plus parce que j'ai vraiment eu du mal à résoudre ce problème auparavant parce que je m'occupais de personnages japonais dans mes projets passés
9) Certaines polices ne sont pas disponibles dans le PC client, vous devez utiliser Google Fonts pour l'inclure sur votre CSS.
10) Ne pas terminer votre PHP fichier source avec ?>
Remarque:
mais si tout ce que j'ai dit ci-dessus ne fonctionne pas, essayez d'ajuster votre codage en fonction du paramètre-jeu de caractères que vous souhaitez vraiment afficher, pour moi, je limite tout sur SHIFT-JIS
Pour afficher tous mes personnages japonais et cela fonctionne vraiment bien. Mais en utilisant UFT-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 PHP fichier< meta charset="utf-8" />
Dans votre HTML-SFonctionne parfaitement.
Si votre php.ini
default_charset
n'est pas défini sur UTF-8, vous devez utiliser un Content-type
Pour définir vos données. Appliquez l'en-tête suivant en haut de votre (s) fichier (s):
header("Content-type: text/html; charset=utf-8");
Si vous avez toujours des problèmes d'encodage, la cause peut être l'une des opérations suivantes:
default_encoding
paramètre dans les paramètres.ini)<form>
Problème de brict (vérifiez qu'il est envoyé comme UTF-8)<html>
Problème de caractères (où aucun encype n'est défini dans votre fichier HTML)Content-encoding:
Problème (où le mauvais encodage est envoyé par Apache).Définir des noms travaillés pour moi.
Mon problème était dans l'une de mes pages d'édition que le champ avec les caractères étrangers ne s'afficherait pas, sur les pages Web de production, il n'y avait aucun problème.
Je sais que tu as déjà une réponse. C'est génial. Mais étrangement aucune de ces réponses n'a résolu mon problème. J'aimerais partager ma réponse au profit des autres personnes qui peuvent rencontrer les mêmes problèmes.
J'ai également eu les mêmes problèmes que l'OP, en ce qui concerne les accents français dans une application multilingue.
Mais j'ai rencontré cette question pour la première fois lorsque je devais passer des données (accentuées françaises) sous forme de segments dans AJAX appels.
Oui, nous devons avoir l'ensemble de base de données pour travailler avec UTF8. Mais le fait que AJAX appels avait des chaînes de requête (dans mes segments de cas, depuis que j'utilise CodeCheiter), je devais simplement encoder le texte français.
Pour ce faire sur le côté client, utilisez la fonction JavaScript Encoduri () avec vos données.
Et pour l'inverser en PHP, utilisez simplement urldecode($MyStr)
lorsque des données ont été reçues comme paramètres.
J'espère que cela t'aides.
Coller la ligne sous l'en-tête de votre site Web
header('Content-Type: text/html; charset=utf-8');
Page (le fichier) devrait être bon.
Si vous êtes bon Go ICI pour le comportement MySQL après (nom_amètres).