caractéres spéciaux
bonjour
j'ai un probléme avec les caractére spéciaux cad que qd je rentre un texte dans la base de donnée j'utilise: mysql_escape_string($_POST['commentaire'])
et pour afficher: nl2br(stripslashes(htmlentities(trim($row["commentaire"]))))
mais quand il y a des é, /, " etc il m'affiche des truc du style é, j'ai tous essayé mais je n'arrive pas a résoudre mon probléme
merci
Alors, c'est simple, tu as un problème de charset.
Voici ce qu'il faut faire :
1) choisir un charset :p (UTF-8 ou ISO-8859-1 ou ce que tu veux)
2) une fois le charset choisi, il faut configurer ton éditeur de texte pour utiliser ce charset
3) Il faut faire en sorte de dire à apache de servir tes pages avec le charset que tu as choisis (tu peux utiliser la fonction
header de php pour cela)
4) Configurer ta base SQL en utilisant les
collate appropriées à ce charset
5) Quand tu initialises ta connexion SQL, il te faut dire à MySQL quel charset tu comptes utiliser, pour cela, tu peux faire un mysql_query de la requete "SET NAMES 'utf8'" et de "SET CHARACTER SET utf8" (si tu souhaites utiliser l'UTF-8)).
Alors bien sur, cela peu paraitre chiant, et toutes ces vérifications ne sont pas necessaires (certains trucs par defaut peuvent faire que ton code fonctionne, mais il vaut mieux tout vérouiller).
oué je voie merci :D
j'ai du boulot ^^
Koboneil
Marrant, je ne connaissais pas cette fonction :)
Comme quoi, avec preque 9 ans de PHP dans les dents ben on en apprend encore.
bon voila
1) UTF-8 j'ai choisit :p
2)que veut tu dire par "configurer ton éditeur de texte pour utiliser ce charset"
3) j'ai bien lu la doc et tous mais j'voie pas du tous comment faire
4) ma base sql est déja en utf-8: "Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)"
5) il faut le faie a chaqus requete mysql? y a pas un truc a initialisé au debut pour éviter de le faire a chaques fois?
merci,
sinon j'ai trouvé une solution un peu "barbare" lol
nl2br(stripslashes(htmlentities(trim(caractere_speciaux($row["texte_commentaire"])))))
je me suis fait une fonction caractere_speciaux qui ne sont pas pris en compte (y en a une 15aine)
par exemple: $message = str_replace("é","é",$message);
Le fait que tu n'ais pas compris le 2) et ta fonction caractere_speciaux me font douter sur le fait que tu ais compris le problème.
Tes caractères louches ne sont pas des "caractères spéciaux" comme tu le dis, mais des caractères comme les autres.
Seulement, tu les affiches "mal".
Si tu prend le caractère 'é' encodé en ISO-8859-1, celui ci prendra 1 octet en mémoire.
Le même catactère 'é' encodé en UTF-8 prendra 2 octets en mémoire et il s'affichera 'é' sur une page UTF-8, et il s'affichera 'é' sur une page ISO-8859-1 (les 2 octets).
Le 'é' est juste la représentation ISO-8859-1 du caractère UTF-8 'é'.
Sinon, pour en revenir au 2), moi mon éditeur de texte a dans ses options un truc qui dit "utiliser l'encodage de caractère ... pour sauvegarder les fichiers" et je choisis UTF-8 (c'est ton éditeur qui va encoder tes 'é' sur 2 octets, automatiquement).
Pour le 3), il te suffit de faire un header('Content-type: text/html; charset=utf-8'); avant d'afficher ton html.
Enfin pour le 5), il faut le faire juste une fois par session de communication avec MySQL.
ok j'ai fait tous sa ca marche niquel merci :)
mais...
$result = mysql_query("SET NAMES 'utf8'");
$result = mysql_query("INSERT INTO news_commentaire.....");
faire a chaques fois ce SET NAMES avant je trouve pas sa pratique (j'ai pas envie de faire mes modif dans toute mes pages lol:p) y a pas un truc plus pratique?
sinon j'ai un soucis qui est apparu: cad quand je tape "à)" il me met le smilies correspondant à ";)" que je fait changer par
$message = str_replace(";)", '<img src="/images/smilies/wink.gif" alt=";)">', $message);
je voie pas pk :/
Enfin pour le 5), il faut le faire juste une fois par session de communication avec MySQL.
Donc ce set names, tu as à le faire qu'une fois, idéalement juste après ton mysql_connect.
Ensuite, pour tes smileys, sache que beaucoup de fonction de chaine de caractères ne sont pas compatibles UTF-8 dans PHP. PHP6 corrigera ce soucis.
Je te suggere de lire le manuel PHP concernant l'extension
mbstring.
En effet, beaucoup de fonction de PHP se basent sur des octets et nom les caractères pour faire des calculs. Comme en UTF-8 un caractère peut être encodé sur 2 octets, ces fonctions retourneront un résultat faux.
Exemple :
Si tu es en UTF-8, le premier echo affichera 6, le deuxième 5.
Et aussi si tu utilises les fonctions mbstring, il te faudra configurer l'environnement pour dire à mbstring que tu travailles en UTF-8 (tout est expliqué dans la doc).
PHP Version 4.4.9 j'ai cette version de php ca m'a l'air un peu vieux non? je suis hebergé chez OVH
je voie ce que tu vas dire, mnt j'vais bien m'amuser avec cette doc, tous ca a cause du smilie pourris pff :p
merci bcp :)