PHP PSQL Encodage UTF8 encore et encore.....

PHP PSQL Encodage UTF8 encore et encore..... - PHP - Programmation

Marsh Posté le 22-03-2020 à 20:36:27    

Bonjour.
Problème avec les UTF8....
En PHP je prends des données dans une BDD POSTGRESQL et je les recopie pour partie dans une autre seulement ces foutus caractères de notre belle langue française mettent la pagaille au passage et je me retrouve avec une sortie très laide.
 
Voici le format d'encodage des BDD.
 

Code :
  1. master_base_requetes   | postgres     | UTF8     | French_France.1252 | French_France.1252 | =Tc/xxxxx+
  2.                        |              |          |                    |                    |
  3. master_base_total      |  postgres    | UTF8     | French_France.1252 | French_France.1252 | =Tc/xxxxx+
  4.                        |              |          |                    |                    |


Voici le codage de mes BDD.
Je récupère des données en PHP qui sont dans une première BDD, (SELECT FROM etc  etc etc)

Code :
  1. (j'ai enlevé les verif pour simplifier le code)
  2.  $ligne = "SELECT URL, TITLE, TEXT FROM TEST2 WHERE TEXT LIKE '%".$REQ."%' OR TITLE LIKE '%".$REQ."%' ORDER BY URL LIMIT 25 OFFSET 0";
  3.  $requete_sql = pg_query($cursor, $ligne);
  4.  while ($row = pg_fetch_row($requete_sql))
  5.   {
  6.    print '<br>'.$row[2];
  7.    print '<br>'.substr($row[0],0,80);
  8.    print '<br>';

Exemple de données récupérées qui posent problème:

Code :
  1. ..alence même, simultanément bénédiction et malédiction, pourtant je n'ai de cesse que de t'apprivoiser, une persévéran...


je les copie dans une deuxième BDD (INSERT INTO etc etc etc)
 

Code :
  1. $preuve = utf8_encode(str_replace($REQ,$REQMIX,$preuve));
  2. $ligne2 = 'INSERT INTO "'.$NOM_TABLE.'" (URL,TITLE,OCCURENCES,RACINE,PREUVE) '."VALUES ('".$row[0]."','".$row[1]."','".$poids."','".$row[3]."','".$preuve."') ON CONFLICT DO NOTHING";
  3.    $requete_sql2 = pg_query($cursor2, $ligne2);


 

Code :
  1. ...alence même, simultanément bénédiction et malédiction, pourtant je n’ai de cesse que de t’apprivoiser, une persévéran...


---------------
http://www.ypikay.com
Reply

Marsh Posté le 22-03-2020 à 20:36:27   

Reply

Marsh Posté le 22-03-2020 à 21:06:00    

Déjà si tu fais ça, est ce que ça améliore les choses :  

Code :
  1. $query = 'SELECT URL, TITLE, TEXT FROM TEST2 WHERE TEXT LIKE $1 OR TITLE LIKE $1 ORDER BY URL LIMIT 25 OFFSET 0'
  2. $result =  pg_query_params($dbconn, $query, array('%'.$REQ.'%'));
  3. // ....
  4.  
  5. $proof= str_replace($REQ,$REQMIX,$proof);
  6. $insertQuery = 'INSERT INTO "'.$NOM_TABLE.'" (URL,TITLE,OCCURENCES,RACINE,PREUVE) '."VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING";
  7.   $requete_sql2 = pg_query_params($cursor2, $insertQuery, array($row[0], $row[1], $weight, $proof );


utilisation des paramètre plutot que bricolage
renommage des variables en anglais pour être cohérent


---------------

Reply

Marsh Posté le 22-03-2020 à 21:10:48    

attends je regarde la doc sur pg_query_params
merci


---------------
http://www.ypikay.com
Reply

Marsh Posté le 22-03-2020 à 21:28:10    

Non, je viens de changer le code comme tu me l'as dit, ça me retourne toujours le même problème d'encodage


---------------
http://www.ypikay.com
Reply

Marsh Posté le 23-03-2020 à 11:21:12    

Ce genre de bug é, ça ressemble à du double encodage !
Tu as essayé d'enlever la transformation utf8_encode() que tu fais en php ?
 
L'utf-8, c'est très bien mais y'a tout une chaine de chose à respecter car il faut que tout tes éléments soient au courant qu'on bosse en UTF-8...
Essayes de lire ce genre de tutoriaux : https://www.toptal.com/php/a-utf-8- [...] -and-mysql
 
Une fois il m'est même arrivé de chercher bien longtemps pour finir par comprendre que ce que j'avais en base de donnée n'était pas de l'UTF-8 mais des caractères encodé avec une conversion a l'enregistrement et a l'affichage ! ^^


---------------
D3
Reply

Marsh Posté le 23-03-2020 à 14:02:55    

erwan83, tu peux nous faire un export de la création de la table (requête CREATE TABLE...) qui pose pb pour voir quel est l'encodage des différentes colonnes, svp ? Parce que si elles sont déjà en UTF8, ton encodage via PHP va poser pb. Par contre, si elles sont en latin1 (ie ISO-5589-1), là, ça se justifie... si ta page web est elle aussi en utf8. Oui, parce qu'il faut voir ta page web, en quel charset elle est :o
 
Quand on parle de chaîne à respecter, c'est vraiment toute la chaîne : charset de la colonne, charset de la table ou de la BD par défaut, charset de la connexion à la BD utilisé par PHP, charset par défaut du serveur web (apache, IIS), charset annoncé dans le <head> de la page web.. et charset d'encodage de la page web utilisé par ton éditeur de texte (celui-là, on l'oublie souvent).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-03-2020 à 20:31:32    

Hello les gens je vous remercie de toutes vos réponses. J'ai trouvé l'erreur il s'agissait d'un utf8_decode qui trainait dans le foutoir de mon code.


---------------
http://www.ypikay.com
Reply

Marsh Posté le 23-03-2020 à 22:11:04    

Si t'as bien tout configuré, normalement, t'as pas besoin de utf8_decode et utf8_encode.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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