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
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
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é :
Par
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
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Effectivement c'est bizarre cette conversion.
Je me note ça
Merci
https://github.com/pluxml/PluXml/issues/237
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
un appel à urlencode() serait plus approprié mais pas sûr que cela soit nécessaire.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
https://github.com/pluxml/PluXml/commit/066d3007b9999d1b30eace9fe985790a17250e57
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)