PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 29/06/2017 15:38:09

flipflip
Membre
Lieu : Lyon
Inscription : 19/05/2008
Messages : 752
Site Web

urlRewrite et & dans l'url

Bonjour,

Je suis tombé sur un comportement bizarre de la fonction urlRewrite lorsqu'il y a un ou plusieurs paramètres séparé par des &.

Le code suivant

header('Location: '.$plxMotor->urlRewrite('?static18/portail&p=stock'));
exit;

L'url affiché dans le navigateur (Firefox 54 sous linux) donne http://.../index.php?static18/portail&p=stock. Du coup php n'est pas capable de récupérer les variables GET. Ce problème ce produit uniquement dans le cas d'utilisation de header().

J'ai été voir la fonction urlRewrite

        public function urlRewrite($url='') {

                if($url=='' OR $url=='?') return $this->racine;

                preg_match('/^([0-9a-z\_\-\.\/]+)?[\?]?([0-9a-z\_\-\.\/,&=%]+)?[\#]?(.*)$/i', $url, $args);

                if($this->aConf['urlrewriting']) {
                        $new_url  = str_replace('index.php', '', $args[1]);
                        $new_url  = str_replace('feed.php', 'feed/', $new_url);
                        $new_url .= !empty($args[2])?$args[2]:'';
                        if(empty($new_url))     $new_url = $this->path_url;
                        $new_url .= !empty($args[3])?'#'.$args[3]:'';
                        return str_replace('&', '&', $this->racine.$new_url);
                } else {
                        if(empty($args[1]) AND !empty($args[2])) $args[1] = 'index.php';
                        $new_url  = !empty($args[1])?$args[1]:$this->path_url;
                        $new_url .= !empty($args[2])?'?'.$args[2]:'';
                        $new_url .= !empty($args[3])?'#'.$args[3]:'';
                        return str_replace('&', '&', $this->racine.$new_url);
                }
        }

Le fautif est str_replace qui remplace le & &. Sans arriver à retrouver où j'ai lu que dans le header() il ne peut avoir d'éléments html donc pas de & ou du moins ils ne seront pas transformés en &.

Pour le moment j'ai remplacé :

return str_replace('&', '&', $this->racine.$new_url);

Par

return $this->racine.$new_url;

Dernière modification par flipflip (29/06/2017 15:39:02)


"J'ai un string dans l'array" | http://www.blogoflip.fr

Hors ligne

#2 29/06/2017 15:48:26

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 218
Site Web

Re : urlRewrite et & dans l'url

Salut
Effectivement c'est bizarre cette conversion.
Je me note ça
Merci

https://github.com/pluxml/PluXml/issues/237


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#3 29/06/2017 23:46:38

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 830
Site Web

Re : urlRewrite et & dans l'url

Effectivement, remplacer un caractère par une entité HTML dans une URL fait bizarre.
un appel à urlencode() serait plus approprié mais pas sûr que cela soit nécessaire.

Hors ligne

#4 04/12/2017 12:52:40

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 218
Site Web

Re : urlRewrite et & dans l'url


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2017 PluXml.org, tous droits réservés