urlRewrite et & dans l'url

flipflipflipflip Member
juin 2017 modifié dans Bogues
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;

J'ai un string de l'array

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.