PHP 8.4.2 Released!

urlencode

(PHP 4, PHP 5, PHP 7, PHP 8)

urlencodeCodifica uma string no formato URL

Descrição

urlencode(string $string): string

Esta função é conveniente ao codificar uma string a ser usada em uma parte de consulta de uma URL, como uma maneira conveniente de passar variáveis ​​para a próxima página.

Parâmetros

string

A string a ser codificada.

Valor Retornado

Retorna uma string na qual todos os caracteres não alfanuméricos, exceto -_., foram substituídos por um sinal de porcentagem (%) seguido por dois dígitos hexadecimais e espaços codificados como sinais de adição (+). Ela é codificada da mesma forma que os dados enviados por um formulário WWW são codificados, ou seja, da mesma forma que no tipo de mídia application/x-www-form-urlencoded. Isso difere da codificação » RFC 3986 (consulte rawurlencode()) porque, por razões históricas, os espaços são codificados como sinais de adição (+).

Exemplos

Exemplo #1 Exemplo de urlencode()

<?php
$userinput
= 'Dados123!@-_ +';
echo
"Entrada do usuário: $userinput\n";
echo
'<a href="mycgi?foo=', urlencode($userinput), '">';
?>

O exemplo acima produzirá:

Entrada do usuário: Dados123!@-_ +
<a href="mycgi?foo=Dados123%21%40-_+%2B">

Exemplo #2 Exemplo de urlencode() e htmlentities()

<?php
$foo
= 'Dados123!@-_ +';
$bar = "Diferente de $foo";
echo
"foo: $foo\n";
echo
"bar: $bar\n";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo
'<a href="mycgi?' . htmlentities($query_string) . '">';
?>

O exemplo acima produzirá:

foo: Dados123!@-_ +
bar: Diferente de Dados123!@-_ +
<a href="mycgi?foo=Dados123%21%40-_+%2B&amp;bar=Diferente+de+Dados123%21%40-_+%2B">

Notas

Nota:

Deve-se ter cuidado com variáveis ​​que possam corresponder a entidades HTML. Coisas como &amp, &copy e &pound são analisadas pelo navegador e a entidade real é usada no lugar do nome da variável desejada. Este é um incômodo óbvio sobre o qual o W3C vem falando às pessoas há anos. A referência está aqui: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2.

O PHP suporta a alteração do separador de argumentos para o ponto e vírgula sugerido pelo W3C por meio da diretiva INI arg_separator. Infelizmente, a maioria dos agentes de usuário não envia dados de formulário neste formato separado por ponto e vírgula. Uma maneira mais portável de contornar isso é usar &amp; em vez de & como separador. Não é necessário alterar o arg_separator do PHP para isso. Deve ser mantido como &, mas as URLs devem simplesmente ser codificadas usando htmlentities() ou htmlspecialchars().

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 6 notes

up
66
davis dot peixoto at gmail dot com
14 years ago
urlencode function and rawurlencode are mostly based on RFC 1738.

However, since 2005 the current RFC in use for URIs standard is RFC 3986.

Here is a function to encode URLs according to RFC 3986.

<?php
function myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
return
str_replace($entities, $replacements, urlencode($string));
}
?>
up
9
temu92 at gmail dot com
15 years ago
I needed encoding and decoding for UTF8 urls, I came up with these very simple fuctions. Hope this helps!

<?php
function url_encode($string){
return
urlencode(utf8_encode($string));
}

function
url_decode($string){
return
utf8_decode(urldecode($string));
}
?>
up
1
materialsmoke at gmail dot com
1 year ago
this function will encode the URL while preserving the functionality of URL so you can copy and paste it in the browser
```
function urlEncode($url) {
$parsedUrl = parse_url($url);

$encodedScheme = urlencode($parsedUrl['scheme']);
$encodedHost = urlencode($parsedUrl['host']);

$encodedPath = implode('/', array_map('urlencode', explode('/', $parsedUrl['path'])));
if (isset($parsedUrl['query'])) {
$encodedQuery = '?' . urlencode($parsedUrl['query']);
} else {
$encodedQuery = '';
}

return "{$encodedScheme}://{$encodedHost}{$encodedPath}{$encodedQuery}";
}
```
up
8
daniel+php at danielnorton dot com
15 years ago
Don't use urlencode() or urldecode() if the text includes an email address, as it destroys the "+" character, a perfectly valid email address character.

Unless you're certain that you won't be encoding email addresses AND you need the readability provided by the non-standard "+" usage, instead always use use rawurlencode() or rawurldecode().
up
8
omid at omidsakhi dot com
14 years ago
I needed a function in PHP to do the same job as the complete escape function in Javascript. It took me some time not to find it. But findaly I decided to write my own code. So just to save time:

<?php
function fullescape($in)
{
$out = '';
for (
$i=0;$i<strlen($in);$i++)
{
$hex = dechex(ord($in[$i]));
if (
$hex=='')
$out = $out.urlencode($in[$i]);
else
$out = $out .'%'.((strlen($hex)==1) ? ('0'.strtoupper($hex)):(strtoupper($hex)));
}
$out = str_replace('+','%20',$out);
$out = str_replace('_','%5F',$out);
$out = str_replace('.','%2E',$out);
$out = str_replace('-','%2D',$out);
return
$out;
}
?>

It can be fully decoded using the unscape function in Javascript.
up
1
ahrensberg at gmail dot com
17 years ago
Like "Benjamin dot Bruno at web dot de" earlier has writen, you can have problems with encode strings with special characters to flash. Benjamin write that:

<?php
function flash_encode ($input)
{
return
rawurlencode(utf8_encode($input));
}
?>

... could do the problem. Unfortunately flash still have problems with read some quotations, but with this one:

<?php
function flash_encode($string)
{
$string = rawurlencode(utf8_encode($string));

$string = str_replace("%C2%96", "-", $string);
$string = str_replace("%C2%91", "%27", $string);
$string = str_replace("%C2%92", "%27", $string);
$string = str_replace("%C2%82", "%27", $string);
$string = str_replace("%C2%93", "%22", $string);
$string = str_replace("%C2%94", "%22", $string);
$string = str_replace("%C2%84", "%22", $string);
$string = str_replace("%C2%8B", "%C2%AB", $string);
$string = str_replace("%C2%9B", "%C2%BB", $string);

return
$string;
}
?>

... should solve this problem.
To Top