Bonjour, je suis Atbbkaugust, développeur web amateur et j'ai décidé de passer mon site à l'encodage UTF-8, j'ai donc tout fait correctement, c'est à dire :
- J'ai mis mes tables et colonnes sql en UTF-8 (ALTER TABLE etc.)
- J'ai mis le header PHP pour UTF-8 (<?php header('content-type: text/html; charset=utf-8'); ?>)
- J'ai mis l'indication d'encodage UTF-8 en html5 (<meta charset="utf-8">)
- J'ai mis ceci après ma connexion à ma BDD : $bdd->query("SET NAMES 'utf8'");
- J'ai, grâce à Sublime Text 2 réouvert tous mes fichiers avec l'encodage UTF-8
- J'ai aussi essayé de mettre ça : echo utf8_decode();
- J'ai mis ceci après ma connexion à ma BDD : $bdd->query("SET NAMES 'utf8'");<br>
À la place rajoute la commande lors de la création de ton instance PDO.<br>
Exemple tirer de ma classe DBFactory<br><pre class="brush: php;"><?php
return new PDO($strConnect, self::$tabCfg['userName'], self::$tabCfg['pass'], array(1002 => 'SET NAMES \'UTF8\'', PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE => self::$tabCfg['errMode']));
</pre><br>
La partie intéressante:<br><pre class="brush: php;"><?php
array(1002 => 'SET NAMES \'UTF8\'');
</pre><br><br>
- J'ai, grâce à Sublime Text 2 réouvert tous mes fichiers avec l'encodage UTF-8<br>
Tu dois choisir UTF-8 (sans bom) si c'est pas lui tu as prit.<br><br>
Tu as un lien dans ma signature "UTF" qui te dis les choses a ne pas oublier pour évité que je te les renomme tous. Comme celle de mettre:<br><pre class="brush: plain;">AddDefaultCharset UTF-8
</pre><br>
Dans un fichier .htaccess à la racine de ton site.Le 16 avril 2012 à 22:10:24
- J'ai mis ceci après ma connexion à ma BDD : $bdd->query("SET NAMES 'utf8'");
À la place rajoute la commande lors de la création de ton instance PDO.
Exemple tirer de ma classe DBFactory
@Belzbuth : merci pour la première proposition, j'essayerais tandis que pour la seconde j'ai essayé de mettre ceci dans un .htaccess, mais j'imagine que mon hébergeur ne gère pas les .htaccess mais la page me renvoyait sur une erreur (503 il me semble) lorsque j'ajoutais le .htaccess.<br><br>
Edit : Je vois pas bien où mettre la ligne, pour la connexion j'ai quelque chose comme ça : <pre class="brush: php;"><?php
session_start();
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=***;dbname=***', '***', '***');
$bdd->query("SET NAMES 'utf8'");
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>
</pre><br><br>
@sagittaire : Je n'utilise pas Mysql, mais PDO et j'ai déjà inclu cette ligne : $bdd->query("SET NAMES 'utf8'");Le 17 avril 2012 à 1:07:16
@Belzbuth : merci pour la première proposition, j'essayerais tandis que pour la seconde j'ai essayé de mettre ceci dans un .htaccess, mais j'imagine que mon hébergeur ne gère pas les .htaccess mais la page me renvoyait sur une erreur (503 il me semble) lorsque j'ajoutais le .htaccess.
Edit : Je vois pas bien où mettre la ligne, pour la connexion j'ai quelque chose comme ça :
<?php
session_start();
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=***;dbname=***', '***', '***');
$bdd->query("SET NAMES 'utf8'");
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>
@sagittaire : Je n'utilise pas Mysql, mais PDO et j'ai déjà inclu cette ligne : $bdd->query("SET NAMES 'utf8'");
Salut,<br><br>
Je me trompe peut-être, mais essaye de glisser un uft8_encode(); sur les bouts de textes qui posent problèmes ... ?Le 17 avril 2012 à 1:24:49
Salut,
Je me trompe peut-être, mais essaye de glisser un uft8_encode(); sur les bouts de textes qui posent problèmes ... ?
Tu utilises un tableau d'option pour PDO mais tu lui passes pas en paramètre lol. Tien code corriger avec ce que je disais dans mon premier messages en plus:<br><br><pre class="brush: php;"><?php
session_start();
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[1002] = 'SET NAMES \'UTF8\'';
$bdd = new PDO('mysql:host=***;dbname=***', '***', '***', $pdo_options);
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
exit('Erreur : '.$e->getMessage());
}
</pre><br><br>
Du même coup quand tu va avoir une erreur venant de PDO il va généré une exception comme tu voulais dans le fond <img src="/bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/langue.png" alt=":p" class="smilies"><br><br>
Pour ce qui est du fichier .htacess je peux pas dire sa dépend toujours de l'hébergeur. Oubli pas de lire tutoriel dont le lien 'UTF' est dans ma signature pour voir se que tu aurais pu oublier.Le 17 avril 2012 à 1:48:34
Tu utilises un tableau d'option pour PDO mais tu lui passes pas en paramètre lol. Tien code corriger avec ce que je disais dans mon premier messages en plus:
<?php
session_start();
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[1002] = 'SET NAMES \'UTF8\'';
$bdd = new PDO('mysql:host=***;dbname=***', '***', '***', $pdo_options);
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
exit('Erreur : '.$e->getMessage());
}
Du même coup quand tu va avoir une erreur venant de PDO il va généré une exception comme tu voulais dans le fond
Pour ce qui est du fichier .htacess je peux pas dire sa dépend toujours de l'hébergeur. Oubli pas de lire tutoriel dont le lien 'UTF' est dans ma signature pour voir se que tu aurais pu oublier.
@metayd : merci mais j'ai essayé utf8_encode et utf8_decode ça marche pas.<br><br>
@Belzebuth : Ok j'essaye, j'édite pour dire si ça marche. Edit : ça marche pas :/Le 17 avril 2012 à 12:01:52
@metayd : merci mais j'ai essayé utf8_encode et utf8_decode ça marche pas.
@Belzebuth : Ok j'essaye, j'édite pour dire si ça marche. Edit : ça marche pas :/
Essaie ça plutôt:<br><div class="spoiler2_hidden"><div class="spoiler3_hidden"><pre class="brush: php;"><?php
session_start();
try {
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', $pdo_options);
$bdd->exec("SET CHARACTER SET utf8");
} catch(Exception $e) {
//on affiche un message d'erreur ainsi que les erreurs
echo 'Tout ne s\'est pas bien passé, voir les erreurs ci-dessous<br />';
echo 'Erreur : '.$e->getMessage().'<br />';
//on arrête l'exécution s'il y a du code après
die();
}
?>
</pre></div></div>Le 17 avril 2012 à 13:06:55
Essaie ça plutôt:
<?php
session_start();
try {
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', $pdo_options);
$bdd->exec("SET CHARACTER SET utf8");
} catch(Exception $e) {
//on affiche un message d'erreur ainsi que les erreurs
echo 'Tout ne s\'est pas bien passé, voir les erreurs ci-dessous<br />';
echo 'Erreur : '.$e->getMessage().'<br />';
//on arrête l'exécution s'il y a du code après
die();
}
?>
Tu peux aussi modifier le fichier de configuration de ton serveur Apache (httpd.conf) en rajoutant la ligne suivante:<br><br><pre class="brush: plain;">AddDefaultCharset UTF-8
</pre>Le 17 avril 2012 à 17:53:05
Tu peux aussi modifier le fichier de configuration de ton serveur Apache (httpd.conf) en rajoutant la ligne suivante:
@JUARAGON : bah j'ai converti toute ma BDD en UTF-8.<br>
@Leon@rd : Je suis sur un serveur mutualisé.<br><br>
Merci pour toutes vos réponses, j'espère que l'on trouvera la solution.Le 17 avril 2012 à 17:58:13
@JUARAGON : bah j'ai converti toute ma BDD en UTF-8.
@Leon@rd : Je suis sur un serveur mutualisé.
Merci pour toutes vos réponses, j'espère que l'on trouvera la solution.
Merci mais ça ne marche toujours pas.<br>
Je vous remercie de m'aider <img src="/bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/smile.png" alt=":)" class="smilies"> , ça vient sûrement de la BDD, je vais essayer de créer une table en UTF-8 (toutes mes autres tables sont sensées être en UTF-8 mais bon) et essayer d'afficher du texte.<br>
Ce que je ne comprends pas c'est que les titres eux passent correctement.<br><br>
Edit :<br><br>
Désolé, petite erreur de ma part, j'ai résolu mon problème (grâce à vous <img src="/bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/heureux.png" alt=":D" class="smilies"> ), j'avais bien appliqué <strong>utf8_decode()</strong> mais pas sur le bon bout de code, finalement pour afficher le contenu de ma news ça donne ça : <strong>echo zcode(utf8_decode(stripslashes($donnees['contenu'])));</strong><br><br>
Merci beaucoup à tous, je vois que la communauté du siteduzéro est toujours amicale et qu'elle aide encore les gens, contrairement à ce que dise certains. <img src="/bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/smile.png" alt=":)" class="smilies">Le 17 avril 2012 à 19:08:44
Merci mais ça ne marche toujours pas.
Je vous remercie de m'aider , ça vient sûrement de la BDD, je vais essayer de créer une table en UTF-8 (toutes mes autres tables sont sensées être en UTF-8 mais bon) et essayer d'afficher du texte.
Ce que je ne comprends pas c'est que les titres eux passent correctement.
Edit :
Désolé, petite erreur de ma part, j'ai résolu mon problème (grâce à vous ), j'avais bien appliqué utf8_decode() mais pas sur le bon bout de code, finalement pour afficher le contenu de ma news ça donne ça : echo zcode(utf8_decode(stripslashes($donnees['contenu'])));
Merci beaucoup à tous, je vois que la communauté du siteduzéro est toujours amicale et qu'elle aide encore les gens, contrairement à ce que dise certains.
Hum, tu patch un problème sans vraiment le régler.<br><br>
- stripslashes() ? Désactive tes magic quotes à la place.<br><br>
- utf8_decode() -> sa veux dire que depuis le début le problème viens pas de ta base de données car si tu dis sa affiche correctement en utilisant cette fonction c'est que le 'contenu' est en utf-8 et tu le converti en ISO avec cette fonction donc l'affichage PHP il te manque des choses.<br><br>
- Pour en revenir sur la ligne dans le .htaccess, tu dis que quand tu as créer le fichier .htaccess à la racine de ton site il ta afficher une 503. C'est signe, fort probablement, que ton héberger prend en compte les .htaccess. <br><br>
Si tu nommes ton héberger les gens qui l'utilises pourrait te répondre sinon l'héberger a surement une FAQ ou google peut t'aidé a trouvé. Comme mon héberger si je veux le faire passé a PHP version presque la plus récente je dois mettre dans mon .htaccess une ligne spécifique. Tout dépend de l'héberger mais même en mutualiser le mien(GoDaddy) accepte les .htaccess et les php.ini.<br><br>
Au faite, as tu été lire le tutoriel ?Le 17 avril 2012 à 22:36:54
Hum, tu patch un problème sans vraiment le régler.
- stripslashes() ? Désactive tes magic quotes à la place.
- utf8_decode() -> sa veux dire que depuis le début le problème viens pas de ta base de données car si tu dis sa affiche correctement en utilisant cette fonction c'est que le 'contenu' est en utf-8 et tu le converti en ISO avec cette fonction donc l'affichage PHP il te manque des choses.
- Pour en revenir sur la ligne dans le .htaccess, tu dis que quand tu as créer le fichier .htaccess à la racine de ton site il ta afficher une 503. C'est signe, fort probablement, que ton héberger prend en compte les .htaccess.
Si tu nommes ton héberger les gens qui l'utilises pourrait te répondre sinon l'héberger a surement une FAQ ou google peut t'aidé a trouvé. Comme mon héberger si je veux le faire passé a PHP version presque la plus récente je dois mettre dans mon .htaccess une ligne spécifique. Tout dépend de l'héberger mais même en mutualiser le mien(GoDaddy) accepte les .htaccess et les php.ini.
"Tu as un lien dans ma signature "UTF" qui te dis les choses a ne pas oublier pour évité que je te les renomme tous."<br><br>
"Oubli pas de lire tutoriel dont le lien 'UTF' est dans ma signature pour voir se que tu aurais pu oublier."<br><br>
Signature = tu vois en bas quand je poste un message il est marquer "Liens utiles:" avec plein de lien clic sur 'UTF' ...Le 18 avril 2012 à 1:09:00
"Tu as un lien dans ma signature "UTF" qui te dis les choses a ne pas oublier pour évité que je te les renomme tous."
"Oubli pas de lire tutoriel dont le lien 'UTF' est dans ma signature pour voir se que tu aurais pu oublier."
Signature = tu vois en bas quand je poste un message il est marquer "Liens utiles:" avec plein de lien clic sur 'UTF' ...
"Sinon j'ai rajouté la ligne dans le .htaccess, elle ne devait pas marcher à cause d'une erreur de syntaxe ou je ne sais quoi."<br><br>
Et elle fonctionne maintenant ?<br><br>
Si elle ne fonctionne toujours pas je te conseilles d'ouvrir un autre topic avec dans le titre [1&1] UTF-8. Et dire que quand tu ajoutes AddDefaultCharset UTF-8 dans le fichier .htaccess sa ne fonctionne pas. Hum, peut-être un problème de dire dans un php.ini d'accepter les .htaccess.<br><br>
Pas juste a cause du "AddDefaultCharset UTF-8" mais les .htaccess sont indispensable si on pense juste a bloquer l'accès a un dossier ou désactivé l'affichage apache par défaut des dossiers quand il y a pas de fichier index dans un répertoire.<br><br>
Tu peux en même temps dans ton fichier php.ini si tu as accès surement remarque car je crois c'est toi qui faut qui le crée et le mettre à la racine ou un php5.ini désactivé les magic_quotes.<br><br>
À toi de voir.Le 18 avril 2012 à 1:37:41
"Sinon j'ai rajouté la ligne dans le .htaccess, elle ne devait pas marcher à cause d'une erreur de syntaxe ou je ne sais quoi."
Et elle fonctionne maintenant ?
Si elle ne fonctionne toujours pas je te conseilles d'ouvrir un autre topic avec dans le titre [1&1] UTF-8. Et dire que quand tu ajoutes AddDefaultCharset UTF-8 dans le fichier .htaccess sa ne fonctionne pas. Hum, peut-être un problème de dire dans un php.ini d'accepter les .htaccess.
Pas juste a cause du "AddDefaultCharset UTF-8" mais les .htaccess sont indispensable si on pense juste a bloquer l'accès a un dossier ou désactivé l'affichage apache par défaut des dossiers quand il y a pas de fichier index dans un répertoire.
Tu peux en même temps dans ton fichier php.ini si tu as accès surement remarque car je crois c'est toi qui faut qui le crée et le mettre à la racine ou un php5.ini désactivé les magic_quotes.