IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] Mauvais encodage de chaine url


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Points : 62
    Points
    62
    Par défaut [XML] Mauvais encodage de chaine url
    Bonjour,

    je rencontre un pb d'encodage d'une chaine url produite à partir d'un script trouvé sur le net .

    par exemple:

    "Allée des cassis" devrait être "All%C3%A9e%20des%20cassis%0A"

    mais le code produit "All%E9e%20des%20cassis" ce qui est incorrect.
    pour le cas d'espèce il s'agit de la lettre "é" qui est mal codée.

    j'exploite cette chaine ensuite dans un xsl via un javascript avec decodeURIComponent mais compte tenu de l'erreur de codage je récupère une erreur URIerror

    j'ai distingué la fonction urlencode mais mes connaissances en code hp sont extrêmement limitées, je ne sais où la placer.

    Auriez vous une piste?

    Grand Merci

    le code PHP livesearch.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
    $xmlDoc=new DOMDocument();
    $xmlDoc->load("livesearch.xml");
     
    $x=$xmlDoc->getElementsByTagName('link');
     
    //get the q parameter from URL
    $q=$_GET["q"];
     
    //lookup all links from the xml file if length of q>0
    if (strlen($q)>0){
    $hint="";
    for($i=0; $i<($x->length); $i++){
      $y=$x->item($i)->getElementsByTagName('title');
      $z=$x->item($i)->getElementsByTagName('url');
      $massif=$x->item($i)->getElementsByTagName('title');//var massif
     
      if ($y->item(0)->nodeType==1){
        //find a link matching the search text
        if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)){
          if ($hint==""){
            $hint="<a href='" . 
            $z->item(0)->childNodes->item(0)->nodeValue . 
            "' target='_blank'>" . 
            $y->item(0)->childNodes->item(0)->nodeValue . "</a>";       
     
            }
          else{
            $hint=$hint . "<br /><a href='" . 
            $z->item(0)->childNodes->item(0)->nodeValue . 
            "' target='_blank'>" . 
            $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
            }
          }
        }
      }
    }
     
    // Set output to "no suggestion" if no hint were found
    // or to the correct values
    if ($hint==""){
      $response="Oups! Aucune suggestion.";
      }
    else{
      $response=$hint;
      }
     
    //output the response
    echo $response;
     
    ?>
    et le fichier xml

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0" encoding="UTF-8"?>
    <pages>
     
      <link>
        <title>95.2</title>
        <url>blocableau3x.html?95.2</url>
      </link>
    ....
    ....
      <link>
        <title>Allée des cassis</title>
        <url>blocableau3x.html?Allée des cassis</url>
      </link>
      <link>
        <title>Apremont</title>
        <url>blocableau3x.html?Apremont</url>
      </link>
    </pages>

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je réponds à côté, mais pourquoi passer par l'url des trucs comme ça ? Pourquoi ne pas utliser la méthode POST ? bref...

    Sinon quitte à prendre un script, prends-le sur le manuel PHP
    http://us3.php.net/manual/fr/function.rawurlencode.php
    Par exemple, celui-ci a l'avantage de basculer sur les deux normes en vigueur selon ce que renvoie la variable d'environnement.
    Mais de l'avis de tous ces experts, aucun script d'encodage d'URL n'est parfait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php
     
      if (!function_exists('http_build_query')) {
     
        if (!defined('PHP_QUERY_RFC1738')) define('PHP_QUERY_RFC1738', 1);
        if (!defined('PHP_QUERY_RFC3986')) define('PHP_QUERY_RFC3986', 2);
     
        function http_build_query ($query_data, $numeric_prefix = NULL, $arg_separator = NULL, $enc_type = PHP_QUERY_RFC1738, $base = NULL) {
          $result = array();
          $arg_separator = ($arg_separator != '') ? (string) $arg_separator : ini_get('arg_separator.output');
          $enc_func = ($enc_type == PHP_QUERY_RFC3986) ? 'rawurlencode' : 'urlencode';
          foreach ($query_data as $key => $item) $result[] = (is_array($item) || is_object($item)) ? http_build_query($item, NULL, $arg_separator, $enc_type, ($base !== NULL) ? "$base%5B".$enc_func($key).'%5D' : $enc_func($key)) : (($base !== NULL) ? "$base%5B".$enc_func($key).'%5D='.$enc_func($item) : ((is_int($key) && $numeric_prefix !== NULL) ? (string) $numeric_prefix : '').$enc_func($key).'='.$enc_func($item));
          return implode($arg_separator, $result);
        }
     
      }
    //c'est moi qui ajoute, je ne suis pas sûre que la fonction se convoque ainsi
      $url=array('http://méméGâteau.monserveur.php');
      $newUrl=http_build_query($url);
      echo $newUrl;// donnera le é comme tu l'aimes 0=http%3A%2F%2Fm%C3%A9m%C3%A9G%C3%A2teau.monserveur.php
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Points : 62
    Points
    62
    Par défaut
    Je vais essayer d'exploiter cette piste.

    Merci bien

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Points : 62
    Points
    62
    Par défaut
    plusieurs essais infructueux.

    j'ai essayé de placer le code suivant mais sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $z->item(0)->childNodes->item(0)->rawurlencode(nodeValue)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Points : 62
    Points
    62
    Par défaut
    il s'agit d'un pb de php et non d xml

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XML-XSL] Chercher une chaine et la replacer
    Par ben23 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 16h20
  2. XML et encodage
    Par Mike_Dev dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 24/05/2006, 16h21
  3. xhr(ajax?) xml et encodage
    Par tthierry dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/12/2005, 16h14
  4. Encodage de chaine -> UTF-8
    Par klarky88 dans le forum MFC
    Réponses: 2
    Dernier message: 26/05/2005, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo