[Forum] Paramètres POST récupérés en UNICODE mais ça dépend des fois ?
Bonjour, depuis un script jquery (DataTables) je passe un nom de mois en post à une page PHP.
Tout se passe bien bien Sauf pour le mois d'Août (à cause de l'accent) et je ne comprends rien du tout à ce qu'il se passe.
Tout d'abord, voici le js :
Code:
1 2 3
| [...]
ajax: 'php/listing_tables.php?nom_utilisateur='+$("#nom_utilisateur").val()+'&date_depense='+$("#date_depense").val();
[...] |
Voici une partie de la page listing_tables.php lancée en ajax :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<?php session_start();
header( 'content-type: text/html; charset=utf-8' );
$date_depense=(isset($_GET['date_depense'])?$_GET['date_depense']:'');
include "../../../bin/cnx/cnx.php";
$requete = "select ID_FACTURE FROM TBL_FACTURE"
$requete .="WHERE upper(TO_CHAR(TO_DATE(DATE_FACTURE,'DD/MM/YYYY HH24:Mi'),'MM/YYYY')) = TO_CHAR(TO_DATE(('".$date_depense."','Mon YYYY'),'MM/YYYY') ";
include "../../../bin/cnx/ordres.php";
<BOUCLE>
echo "<br>date_depense ".$date_depense,
"<br>requete "$requete;
include "../../../bin/cnx/dcnx.php";
?> |
Dans le debug de Chrome, tout à l'air ok, et quand je regarde les flux (network) je lis ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| "<br>date_depense ":"Août 2016"
"<br>requete ":"SELECT distinct DATE_FACTURE, LIB_PRODUIT, FOURNISSEUR, MONTANT, ID_FACTURE
FROM (select DATE_FACTURE
, TP.LIB_PRODUIT
, TFO.LIB_FOURNISSEUR||' ('||ADRESSE_FOURNISSEUR||')' AS FOURNISSEUR
, TF.MONTANT AS MONTANT
, TF.ID_FACTURE
, TS.NUM_AGENT
from TBL_GESTRES_FACTURE TF
, TBL_GESTRES_PRODUIT TP
, TBL_GESTRES_FOURNISSEUR TFO
, TBL_GESTRES_AGENT TT
, TBL_AGENTS TS
where TF.ID_PRODUIT = TP.ID_PRODUIT
AND TF.ID_FOURNISSEUR = TFO.ID_FOURNISSEUR
AND TF.ID_AGENT = TT.NUM_AGENT
AND TT.NUM_AGENT = TS.NUM_AGENT
AND TS.ANTENNE||NVL(TS.PROXIMITE,'0') like '00'
AND upper(TO_CHAR(TO_DATE(DATE_FACTURE,'DD/MM/YYYY HH24:Mi'),'MM/YYYY'))
= TO_CHAR(TO_DATE(('Août 2016','Mon YYYY'),'MM/YYYY') ) WHERE 1=1 " |
mais la requête ne me renvoie rien alors que si je la copie dans toad j'ai bien une ligne.
Depuis le debug de chrome, je lance la page appelée depuis le js dans un onglet du navigateur (clic droit + "open link in a new tab") :
J'ai donc ceci :
[/CODE]
et dans le Network Chrome, je lis
Citation:
"date_depense":"Ao\u00fbt"
soit le û au format unicode ...
:weird:
Dans la page PHP, j'ai donc essayé :
Code:
$date_depense=htmlentities((isset($_GET['date_depense'])?$_GET['date_depense']:''))
j'obtient
Code:
$date_depense=htmlentities(utf8_encode((isset($_GET['date_depense'])?$_GET['date_depense']:'')));
j'obtient
Code:
$date_depense=htmlentities(utf8_decode((isset($_GET['date_depense'])?$_GET['date_depense']:'')));
j'obtient mais en chargeant tout depuis le JS, la requête ne renvoie rien, et dans le débug je lis que
Citation:
"date_depense":"Août"
Mes fichiers js et php sont en utf8 sans BOM.
Je craque ...
HELP ME PLEASE !
Je voudrais juste comprendre
J'ai été obligé de contourner le problème en utilisant un input hidden qui récupère le mois et l'année au format numérique, tandis que le datePicker reste au format "Mois Année".
Ça fonctionne comme ça mais je trouvais l'astuce un peu "mamailloute".
:mouarf:
Mais je persiste.
:scarymov:
Et j'ai déjà :
- validé le fait que la requête s'exécute correctement quand j'écris le mois manuellement depuis PHP
- contrôlé tous les encodages (fichiers PHP, page HTML, connexion au SGDB, fichier js). Ils sont tous en UTF8 sans Bom.
En fait je voudrais juste comprendre.