cs_DevelMan
Messages postés33Date d'inscriptionmardi 23 décembre 2003StatutMembreDernière intervention25 septembre 2004
-
3 juin 2004 à 18:33
matrey
Messages postés399Date d'inscriptionjeudi 31 janvier 2002StatutMembreDernière intervention 6 septembre 2004
-
6 sept. 2004 à 17:47
Bonjour,
Je dois ecrire un prog pour recevoir des donnees via http.
tout fonctionne bien, sauf si les donnees contiennent des caracteres du genre ' (ce qui represente l'apostrophe en code UTF8.
Le premier prog est un prog d'envoie qui utilise curl
Le second (qui 'merde' !!) est le programme de réception.
Si quelqu'un avait l'idée de génie qui me decoincerait !!!!
Merci d'avance
========================================
<?php
// sender.php
//1) PROGRAM USE TO SEND DATA TO THE SERVER (CLIENT)
$fic=$argv[1];
$fp = fopen($fic,"r");
$data="";
$data=fread($fp,filesize($fic));
fclose($fp);
$postvars="AUTH_USER=username&AUTH_PASS=password&AUTH_XML=".$data;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://myurl/receive");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
?>
========================================
2) THE DATA (passed as argv[1] to sender.php)
<?xml version="1.0"?>
<Line1>L'ASSURANCE DE TRANSPORT N'EST PAS A COUVRIR </Line1>
========================================
3) PROGRAM USE TO RECEIVE DATA
<?php
// index.php
// is username ok ?
if (!isset($HTTP_POST_VARS['AUTH_USER']))
{
$buffaux="*NOK* USER ABSENT
\n";
print $buffaux;
exit(1);
}
else
{
$zuser = $HTTP_POST_VARS['AUTH_USER'];
if ($zuser <> "userrname")
{
$buffaux="*NOK* USER INVALIDE ".$zuser."
\n";
print $buffaux;
exit(1);
}
}
// is password ok ?
if (!isset($HTTP_POST_VARS['AUTH_PASS']))
{
$buffaux="*NOK* PASSWORD ABSENT
\n";
print $buffaux;
exit(1);
}
else
{
$zpass = $HTTP_POST_VARS['AUTH_PASS'];
if ($zpass <> "password")
{
$buffaux="*NOK* PASSWORD INVALIDE ".$zpass."
\n";
print $buffaux;
exit(1);
}
}
// Controle si presence du fichier xml
if (!isset($HTTP_POST_VARS['AUTH_XML']))
{
$buffaux="*NOK* FICHIER ABSENT
\n";
print $buffaux;
exit(1);
}
else
{
$zfic = $HTTP_POST_VARS['AUTH_XML'];
$zfic = str_replace('"', '"', $zfic);
}
// All is ok, now we can parse the file
$fp = fopen($file, "w");
fputs($fp, $zfic);
fclose($fp);
// call the parser (when the data is received, the parser work fine)
// but if the data contain characters like ', the data is not received correctly
?>
A voir également:
La méthode http post n''est pas supportée par cette url
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDernière intervention 5 septembre 2006 5 juin 2004 à 14:30
J'ai pas bien pigé, si tu envois:
"allée d'enfer"
Ça marche?
et avec
"allée d& # 3 9enfer" (tout collé sans les blancs)
Ça te donne quoi et tu veux quoi?
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
cs_DevelMan
Messages postés33Date d'inscriptionmardi 23 décembre 2003StatutMembreDernière intervention25 septembre 2004 5 juin 2004 à 14:38
mon pb est le suivant :
"allée d'enfer", çà marche
mais
"allée d& # 3 9;enfer" (tout collé sans les blancs)"
çà marche pas.
Le probleme c'est que ce n'est pas moi qui écrit le prog d'envoie, c'est un client et je dois faire comme il veut !! grrrr !
c'est vraie que & # 39; çà correspond à l'apostrophe en codage UTF8, mais je ne reçois pas (le & est interpreté comme un séparateur, le # est interpreté comme un indice de $_POST) bref .... je ne m'en sort pas !!!!
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDernière intervention 5 septembre 2006 5 juin 2004 à 17:15
J'ai trouvé une solution qui n'est sûrement pas la plus propre
avant d'envoyer ta data tu fais
$data=str_replace("@","@",$data);
$data=str_replace("$","$",$data);
/*On a passé tous les @ en équivalent UTF8 idem pour les $. Ces deux symboles sont alors libres*/
$data=str_replace("&","@",$data);
$data=str_replace("#","$",$data);
/*On remplace tout les & par des @ et tous les # par des $.*/
$postvars="AUTH_USER=username&AUTH_PASS=password&AUTH_XML=".$data;
//et tu continu le prog normalement.
A la réception on fait l'inverse pour récupérer le message d'origine
$data=$HTTP_POST_VARS['AUTH_XML'];
$data=str_replace("$","#",$data);
$data=str_replace("@","&",$data);
$data=str_replace("$","$",$data);
$data=str_replace("@","@",$data);
//et tu continu ton prog
J’ai cherché à le faire avec des fonctions php comme addslashes ou htmlentities ou encore
htmlspecialchars mais ca ne marche pas j’ai trouvé que ca c’est pas le top mais ca tourne
Reste à vérifier que ça ne pose pas d’autres problèmes par la suite
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDernière intervention 5 septembre 2006 5 juin 2004 à 17:30
Rectification, c'est pas bon car l'utilisateur poura utiliser tous les codes du style & # X X
sauf & # 6 4 =code de @
et
& # 3 6=code de $
le prob est donc plus limité mais pas mieux!!!
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDernière intervention 5 septembre 2006 5 juin 2004 à 17:44
sauf si ca te géne pas
de recevoir $
alors qu'il a envoyé & # 3 6
idem pour le @ et & # 6 4
---Perig---
Pour vous servir 8-)
Et parfois en galère :blush)
Souvent même :)
cs_DevelMan
Messages postés33Date d'inscriptionmardi 23 décembre 2003StatutMembreDernière intervention25 septembre 2004 6 juin 2004 à 00:03
Oui, çà aurait pu être une solution .. hélas, je n'ai pas la main sur le programme d'envoie .... donc je me retrouve devant le fait accompli ! .. et l'émetteur ne veut pas modifier son prog !
cs_DevelMan
Messages postés33Date d'inscriptionmardi 23 décembre 2003StatutMembreDernière intervention25 septembre 2004 6 juin 2004 à 17:16
Super sympa de m'aider .. j'ai aussi essayé de reconstituer la chaine avec ce genre de truc :
while(list($indice,$valeur) = each($_POST))
{
print "VALEUR=".$valeur."\n";
if (substr($indice,0,1)=="#")
{
$v=$indice;
}
else
{
$v=$valeur;
}
Les # foutent la merde, car ils se retrouvent dans $indice.
Dons je voulais prendre dans $indice si le premier car était #, mais il me manque une partie de la chaine !