|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Bonjour, je débute plus ou moins en base de données et php, j'ai un site assez simple où j'enregistre des textes avec un formulaire XHTML qui sont envoyés dans la base de données puis réaffichés en PHP.
La base de données est celle fournie avec un espace perso Free. Après avoir lu plusieurs avis, j'ai choisi d'enregistrer dans la base de données le texte brut puis de convertir avec les caractères spéciaux HTML seulement à la lecture des tables. Le problème est que lors de l'envoi du texte (l'enregistrement dans la table) certains caractères spéciaux sont transformés j'entre ceci dans le formulaire : é è à ç dans mon code php la variable $texte réaffiche ces mêmes caractères, par contre lorsque je vais lire la base de données (à partir d'un autre code php, et sur le site de gestion en ligne phpmyadmin.free.fr) c'est ceci qui est affiché (sans les espaces sur le code html) : é & #232 ; & #224 ; ç voici la portion de code Code :
Merci d'avance |
||
|
00
|
|
|
#2 |
|
Invité de passage
![]() |
essaye ça:
utf8_decode() lors de la lecture |
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
quel est le jeu de caractères de ta page ?
comment visualises-tu ce qu'il y a dans ta base ? est-ce que ce ne serait pas juste un mauvais réglage de phpMyAdmin ? |
|
|
00
|
|
|
#4 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Pour la page c'est ça :
<meta http-equiv="content-type" content="text/html; charset=windows-1250" /> Honnètement je ne sais pas trop à quoi ça correspond comme encodage ^^ Pour ce qui est du visionnage, j'ai le même résultat en récupérant le texte par PHP/MySQL qu'en visionnant sur le site en ligne. Par contre je vois qu'il y a une erreur dans le sujet dsl, le résultat visionné a été converti là. Ce que je vois c'est ça (sans les espaces sur le code html) : é & #232 ; & #224 ; ç Hum donc j'ai un peu mal formulé le problème, même si je suppose que ça tourne autour de l'encodage. Certains caractères (ici è et à) sont convertit en HTML alors que je n'utilise plus la fonction htmlentities() AVANT d'envoyer dans la base de données. Et j'ai cherché un peu mais je ne vois nulle part dans phpMyAdmin une option qui puisse être en rapport :/ |
|
00
|
|
|
#5 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Bon je n'arrive pas à trouver pourquoi les caractères sont (partiellement) convertis en code HTML.
Etant donné que le texte récupéré passe par htmlentities(), le code HTML ressort avec le '&' convertit en "& amp ;". Solution bricolage que je viens de trouver remplacer "& amp ;" par le caractère '&' à nouveau pour que les caractères s'affichent avec le code. Code :
$texte = str_replace("&", "&", $texte); |
|
00
|
|
|
#6 | ||
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Citation:
Si ça ne correspond pas à ce que tu veux, je ne peux que t'inciter à utiliser un jeu plus adapté, latin-1 ou UTF-8. Citation:
Ton htmlentities à l'affichage peut produire ce genre d'erreurs : en effet, htmlentities utilise par défaut le latin-1 (ISO-8859-1), et ne va pas forcément encoder correctement en windows-1250. Dans PHP5, tu peux préciser le jeu à utiliser dans htmlentities. Si ces caractères mal affichés l'ont été dans des champs de formulaire, puis renvoyés au serveur MySQL, cela peut expliquer la présence de code HTML dans la base. |
||
|
|
00
|
|
|
#7 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Non le HTML et le formulaire n'y est pour rien car comme je le montre dans le bout de code, j'ai testé le contenu de ma variable PHP juste avant d'envoyer la requête SQL et le texte était normal.
De plus il ne s'agit pas d'un mauvais affichage suite à un encodage, mais plutôt de la conversion en caractère HTML lors de l'écriture dans la base de données. Peut être que le problème vient plutôt de phpmyadmin que d'autre chose :/ |
|
00
|
|
|
#8 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
si ta variable $texte contient "é" et que tu fais un echo, ce que tu verras sur ta page c'est "é"... Il faut que tu regardes sur ton code source et/ou que tu demandes la str_len pour vérifier le nb de caractères...
|
|
|
00
|
|
|
#9 | |||||||
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
En effet je suis bète j'y avais pas pensé...
Tu as raison, les caractères sont transformés déjà avant la requête, le problème vient donc de quelque part dans mon php. Voici les codes utilisés : Le formulaire XHTML Code :
Code :
Citation:
Code :
Je ne vois pas d'où peut venir cette conversion des caractères, de plus le 'é' et le 'ç' ne sont pas transformés eux |
|||||||
|
00
|
|
|
#10 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Je connaissais les magic_quotes, mais pas le magic HTML encoding !
Tu es sûr d'avoir ce gag-là même quand tu pars d'un formulaire vide sur lequel tu tapes toi-même les lettres accentuées ? |
|
|
00
|
|
|
#11 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Oui le texte de test a été tapé dans une textarea vierge :/
J'espérais que ça soit seulement une erreur de ma part flagrante pour un habitué, par contre ce genre de bug divins j'aime pas ça ^^ J'y connais rien mais serait-il possible que la méthode POST effectue cette conversion ? d'ailleurs cette méthode dépend du navigateur ou de l'hébergeur ? |
|
00
|
|
|
#12 | |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Citation:
S'il s'avère que le navigateur est innocent, essaie de voir du côté du forum PHP si qqn a déjà rencontré ce problème-là. |
|
|
|
00
|
|
|
#13 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Exactement le même résultat sous IE. Pour la version du php je ne sais pas, je suis hébergé sur free, je vais aller voir de ce côté là alors. Merci quand même =)
|
|
00
|
|
|
#14 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Le forum PHP a résolu mon problème, il s'agit de l'encodage de ma page qui était windows-1250, une fois le charset mis à ISO-8895-1 les caractères spéciaux ne sont plus convertis.
|
|
00
|
Copyright © 2000-2012 - www.developpez.com