Verifier l'encodage de la requete d'un WebService

Résolu
japette Messages postés 5 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 15 juin 2009 - 15 juin 2009 à 14:53
japette Messages postés 5 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 15 juin 2009 - 15 juin 2009 à 16:29
Bonjour,

Je bute depuis pas mal de temps sur un problème qui m'est assez difficile de résoudre. C'est pour cela que j'ai besoin de vous!

J'écris un webservice qui reçoit des informations afin de les insérer en base. Celles-ci doivent absolument être encodées en UTF8. Je dois, dans le service, vérifier que c'est bien le cas. J'ai rien trouvé de mieux que de faire un appel à la fonction :

mb_detect_encoding($string. 'a' , "UTF-8",true)

Celle ci retourne "UTF-8" si la chaine n'est pas accentuée ou si elle est accentuée ET encodée en UTF-8.

J'ai fait le test en étudiant le contenu de certains fichiers encodés sous différents formats (grâce à Notepad++) et cela marche.
En revanche le même test avec des informations venant de mon service ne marche pas. Je pense que c'est la trame qui est encodée en UTF8 et que je n'y peux rien, car par exemple quand j'envoie un accent encodé en ANSI il est mal reçu de l'autre côté (caractère d'erreur) mais détecté comme étant en UTF8.

Avez vous une idée ?

Merci d'avance

3 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 juin 2009 à 16:08
Salut,

Par quel biais ton service reçoit il les données ? (sockets, cURL, ...)

Cordialement,

Kohntark -
3
japette Messages postés 5 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 15 juin 2009
15 juin 2009 à 16:14
J'utilise la classe SoapClient de la façon qui suit :

    $client = new SoapClient("http://localhost:8080/web/monService.wsdl",
    array("trace" => 1, "exceptions" => 0));
    try
    {
        $ns = 'http://localhost:8080/web/';
        $AuthHeader = new ClientAuthData($username,$password);
        $header =  new SoapHeader($ns,"AuthHeaderElement",  $AuthHeader,false);
        $client->__setSoapHeaders(array($header));   
    }

De plus je suis sur le serveur Apache fourni avec EasyPHP 2.0b1.
0
japette Messages postés 5 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 15 juin 2009
15 juin 2009 à 16:29
... et j'appelle tout bêtement la méthode de la façon suivante :

$tmp=$client->Envoyer($soap_object);
  if($tmp instanceof SoapFault){
      print('
Warning - Exception : '.$tmp->getMessage());
  } else {
      print('
Résultat de la requete : '.$tmp.'.');
  }

Je dois préciser que je suis sous le framework symfony côté service.
0
Rejoignez-nous