Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2849 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2349066
erwan83
Du Shift DEL tu te méfieras !
Posté le 22-03-2020 à 20:36:27  profilanswer
 

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
mood
Publicité
Posté le 22-03-2020 à 20:36:27  profilanswer
 

n°2349067
flo850
moi je
Posté le 22-03-2020 à 21:06:00  profilanswer
 

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


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

n°2349068
erwan83
Du Shift DEL tu te méfieras !
Posté le 22-03-2020 à 21:10:48  profilanswer
 

attends je regarde la doc sur pg_query_params
merci


---------------
http://www.ypikay.com
n°2349069
erwan83
Du Shift DEL tu te méfieras !
Posté le 22-03-2020 à 21:28:10  profilanswer
 

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
n°2349118
mechkurt
Posté le 23-03-2020 à 11:21:12  profilanswer
 

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
n°2349143
rufo
Pas me confondre avec Lycos!
Posté le 23-03-2020 à 14:02:55  profilanswer
 

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
n°2349202
erwan83
Du Shift DEL tu te méfieras !
Posté le 23-03-2020 à 20:31:32  profilanswer
 

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
n°2349231
rufo
Pas me confondre avec Lycos!
Posté le 23-03-2020 à 22:11:04  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
PHP Impossible de Connecter à 2 BDD PSQLPHP : bug avec strtotime
[PHP] - Extraire chemins des fichiers mp3 dans balise audioSite one page, bootstrap 4 et validation PHP
[PHP] - nesbot/Carbon: diffForHumans() amène une erreur 500Fonction mail() de PHP avec plusieurs serveurs SMTP
RechercheV en PHP ?[PHP] Remplacer des mots dans une string par des valeurs d'un tableau
[PHP] Obtenir l'URL précédente 
Plus de sujets relatifs à : PHP PSQL Encodage UTF8 encore et encore.....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR