array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'fr', ), 'this' => array ( 0 => 'function.urlencode.php', 1 => 'urlencode', ), 'up' => array ( 0 => 'ref.url.php', 1 => 'Fonctions URL', ), 'prev' => array ( 0 => 'function.urldecode.php', 1 => 'urldecode', ), 'next' => array ( 0 => 'book.v8js.php', 1 => 'V8js', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'fr', 'path' => 'reference/url/functions/urlencode.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
urlencode — Encode une chaîne en URL
Cette fonction est utile lors de l'encodage d'une chaîne de caractères à utiliser dans la partie d'une URL, comme façon simple de passer des variables vers la page suivante.
Retourne une chaîne dont les caractères non alphanumériques
(hormis -_.
) sont remplacés par des séquences
commençant par un caractère pourcentage (%
),
suivi de deux chiffres hexadécimaux. Les espaces sont
remplacés par des signes plus (+
).
Ce codage est celui qui est utilisé pour poster des
informations dans les formulaires HTML. Le type MIME est
application/x-www-form-urlencoded
.
Ce codage est différent de celui spécifié
dans la » RFC 3986 (voir
rawurlencode()) : pour des raisons historiques,
les espaces sont remplacés par des signes plus (+
).
Exemple #1 Exemple avec urlencode()
<?php
$userinput = 'Data123!@-_ +';
echo "UserInput: $userinput\n";
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
L'exemple ci-dessus va afficher :
UserInput: Data123!@-_ + <a href="mycgi?foo=Data123%21%40-_+%2B">
Exemple #2 Exemple avec urlencode() et htmlentities()
<?php
$foo = 'Data123!@-_ +';
$bar = "Not the same content as $foo";
echo "foo: $foo\n";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>
L'exemple ci-dessus va afficher :
foo: Data123!@-_ + bar: Not the same content as Data123!@-_ + <a href="mycgi?foo=Data123%21%40-_+%2B&bar=Not+the+same+content+as+Data123%21%40-_+%2B">
Note:
Faites bien attention aux variables qui ressemblent à des entités HTML, comme &, © et £, qui sont analysées par le client web et remplacées par leur valeur. C'est un vrai problème qui a été montré par le W3C depuis longtemps. La référence est ici : » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2.
PHP supporte le remplacement de séparateur d'arguments par un point-virgule, comme recommandé par le W3C, grâce à la directive arg_separator du fichier php.ini. Malheureusement, la plupart des clients web n'envoient pas leurs données de formulaire avec des points-virgules. Une solution plus portable est d'utiliser
&
à la place de&
comme séparateur. Vous n'avez alors pas à changer la directive arg_separator. Laissez-la à &, mais encodez vos URL en utilisant htmlentities() ou htmlspecialchars().