ISO-8859-15, utf-8 et mysql [Résolu]

ISO-8859-15, utf-8 et mysql [Résolu] - PHP - Programmation

Marsh Posté le 24-06-2011 à 16:17:53    

Bonjour,
 
Je vais essayer de donner une courte explication malgré la complexité du problème, enfin, pour moi.
 
J'ai un problème insoluble sur lequel je planche depuis plusieurs jours, surtout que je ne suis pas Pro en programmation.
J'utilise un script pour gérer une base de données généalogiques (http://lythgoes.net/genealogy/software.php). Ce script est assez simple à personnaliser, habituellement.
 
On a voulu (qui dit on s'exclue, évidemment), incorporer ce module aux médias de la base de données :
Simple AJAX Commenting System (http://tutorialzine.com/2010/06/simple-ajax-commenting-system/)
 
Pour mes amis anglophone, tout passe comme une lettre à la poste (http://www.tngforum.us/index.php?showtopic=6908&st=0). Mais pour moi, niet! Le fameux problème des accents de la langue française.
 
Donc, pour faire un résumé, les tables de ma base mysql sont en utf8_general_ci, le charset déclaré dans mon entête en ISO-8859-15. Et je ne peux pas le changer en utf-8, le bordel pogne soit dans mes entrées, soit dans l'interface de ma page, cette configuration est la seule qui fonctionne, un mystère apparement.
 
Donc, le script en question, si je laisse les lignes d'origine :
 

Code :
  1. private static function validate_text($str){
  2.  /*
  3.  / This method is used internally as a FILTER_CALLBACK
  4.  */
  5.  if(mb_strlen($str,'utf8')<1)
  6.   return false;
  7.  // Encode all html special characters (<, >, ", & .. etc) and convert
  8.  // the new line characters to <br> tags:
  9.  $str = nl2br(htmlspecialchars($str));
  10.  // Remove the new line characters that are left
  11.  $str = str_replace(array(chr(10),chr(13)),'',$str);
  12.  return $str;
  13. }


 
Les é et autres accents se transforment dans la base mysql et lors de l'affichage, évidemment, un é ressemble à mé
 
J'ai donc fouillé afin de trouver une manière de faire fonctionner le tout.
 
Si je remplace:

Code :
  1. $str = nl2br(htmlspecialchars($str));


 
par :
 

Code :
  1. $str = htmlentities($str, ENT_QUOTES,'UTF-8');


 
OH! Miracle! ça fonctionne #1 sur la page mais.... pas au niveau de mysql qui lui, m'inscrit naturellement l'équivalent en html :
mémé devient m&eacute;m&eacute;
 
Je cherche donc à avoir les accents aussi dans mysql afin d'avoir un code propre et une base facile à travailler. J'ai de la difficulté à croire que c'est impossible. A date, ce que je vois se résume à bien des ajouts (tous les caractères accentués). J'suis parvenue à faire entrer les caractères accentués avec ces lignes :
 

Code :
  1. $str = htmlentities($str, ENT_QUOTES,'UTF-8');
  2. $str = html_entity_decode($str);


 
Sauf que la fonction ajax ne s'actualisait plus automatiquement...
 
Je crois être vraiment proche de la solution mais mes compétences s'arrêtent là, malheureusement.
 
Des idées?
Vous remercie d'avance car là, suis désespéré!


Message édité par genhcn le 24-06-2011 à 19:28:23
Reply

Marsh Posté le 24-06-2011 à 16:17:53   

Reply

Marsh Posté le 24-06-2011 à 16:52:14    

Code :
  1. $str = htmlentities($str, ENT_QUOTES,'UTF-8');
  2. $str = html_entity_decode($str);
 

Là ça revient à rien faire il me semble ce que tu fais. Tu fais un htmlentities et tu reviens au point de départ avec html_entity_decode...

 

J'ai un peu de mal a suivre a quel moment tu en es quand tu fais ça, avant l'insertion en base de donnée?

 

edit: en fait c'est pas gênant que les accents s'affichent pas dans mysql, du moment que tu les a sur la page, ton premier htmlentities suffit, non?


Message édité par caribouuu le 24-06-2011 à 17:01:29

---------------
Bla (blaa bbla)
Reply

Marsh Posté le 24-06-2011 à 17:05:28    

Sinon, tu peux aussi essayer utf8_decode et utf8_encode... :o


---------------
C'est pas bon, Neriki, tu recommences à glander, là. :o
Reply

Marsh Posté le 24-06-2011 à 17:18:42    

@caribouuu
Je sais bien que je suis difficile à suivre, j'ai bien spécifié que je n'étais pas pro en programmation
 :wahoo:  
J'essaye à tout hasard en notant les résultats de mes essais finalement.
C'est ce que je vous ai partagé : des tests.
 
Selon ce que je comprend de mon code, je suis exactement dans les lignes avant l'entrée dans la base mysql
 
 
@neriki
utf8_decode et utf8_encode
Je voudrais bien mais je ne trouve pas comment le faire!
C'est là que je suis jammé finalement!

Reply

Marsh Posté le 24-06-2011 à 17:19:56    

et faudra pas oublier de remettre le nl2br, sinon yaura pas les retours à la ligne dans les commentaires


---------------
Bla (blaa bbla)
Reply

Marsh Posté le 24-06-2011 à 17:30:24    

Parlons en justement de nl2br, où dois-je le remettre?

Reply

Marsh Posté le 24-06-2011 à 19:09:28    

J'ai trouvé une façon de contourner le tout.
J'avais essayé cette solution hier soir mais je devais être fatigué et l'avoir mis au mauvais endroit.
À l'ouverture de la première requête à mysql :
 
mysql_query("SET NAMES 'utf8'" );
 
Tout passe au niveau de l'affichage comme dans MySql....
Bingo!
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed