6 votes

Comment passer le symbole '&' à l'intérieur de la valeur dans une URL ?

J'ai passé la requête à ma page de résultats de recherche avec la variable: ?s=.

J'ai testé le site et j'ai découvert que lorsque la requête contient un symbole &, lorsque j'essaie de la récupérer avec $_GET['s'], elle est coupée au symbole &.

J'ai essayé avec & et également en le convertissant en %26 et j'ai toujours le même problème.

Comment puis-je les encoder pour les passer dans l'URL?

EDIT:

J'ai signalé que j'ai essayé de l'encoder en %26 et cela n'a toujours pas fonctionné.

J'ai essayé avec urlencode() et sur ?s=pizza%26pasta quand j'utilise print_r($_GET) je reçois:

Array ( [s] => pizza [pasta] => )

EDIT 2:

Je viens de découvrir que le problème a en fait à voir avec .htaccess, il semble transformer "&something" en "&something=". Aucune idée de comment le corriger dans htaccess.

Voici mon fichier .htaccess:

RewriteEngine On
RewriteBase /

# remove www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]

# rewrite to action
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)/?$ /a/?s=$1 [L,QSA]

17voto

Leigh Points 8802

Encodage de l'ampersand (&) en %26 est la bonne façon de le faire.

En utilisant http://yoursite.com?var1=this%26that&var2=other vous aurez deux variables dans votre tableau superglobal $_GET

$_GET['var1'] = 'this&that';
$_GET['var2'] = 'other';

Vous pouvez utiliser la fonction urlencode pour encoder automatiquement tous les caractères qui nécessitent un encodage. Ce sont généralement les caractères utilisés pour constituer les différentes parties d'une URL, tels que le symbole @, le deux-points (:), le point d'interrogation (?), etc.

var_dump(urlencode('one&two'));

string(9) "one%26two"

2voto

itsols Points 1695

Utilisez ces étapes:

  1. Commencez par construire votre chaîne en PHP
  2. Ensuite, utilisez la fonction urlencode() pour encoder correctement votre chaîne.
  3. Lorsque vous utilisez $_GET[], assurez-vous d'utiliser urldecode() pour obtenir la variable dans son format d'origine.

J'espère que cela vous aidera :)

0voto

lisovaccaro Points 1331

Ceci est un correctif brut que j'ai créé qui prend le tableau et recherche les clés vides et les fusionne sur une chaîne. Cela ne fonctionne que lorsqu'une seule variable est passée cependant.

function arrayToString($array) {
    $string = '';
    foreach ($array as $key => $value) {
        if($value) {
            $string = $string.'&'.$value;
            } else {
            $string = $string.'&'. $key;
            }
        }
    return substr($string,1,strlen($string));
    }

Ceci est pour plus d'une variable au cas où quelqu'un le trouverait utile:

   function arrayToString($array) {
        $string = '';
        foreach ($array as $key => $value) {
            if($value) {
                $string = $string.'&'.$key.'='.$value;
                } else {
                $string = $string.'&'. $key;
                }
            }
        return substr($string,1,strlen($string));
        }
    return $string

0voto

Vinod Joshi Points 294

Suppose you want send following string into your url:

var1 = "1st Class Ink & Toner"
var2 = "Test1"
var3 = "test3"

Now using php,

var1 = urlencode(var1); left remain the same.

then put them into url: http://url.com/x=var1&y=var2&z=var3

vKj

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X