PHP 8.4.2 Released!

urlencode

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

urlencodeDizgeye URL kodlaması uygular

Açıklama

urlencode(string $dizge): string

Değişkenleri sonraki sayfaya aktarmak için bir URL'nin parçası olarak bir sorgu dizgesinde kullanılmak üzere bir dizgeyi kodlar.

Bağımsız Değişkenler

dizge

Kodlanacak dizge.

Dönen Değerler

Belirtilen dizge içindeki karakterlerden, -_. dışındaki abecesayısal olmayan tüm karakterlerin yüzde (%) imiyle öncelenmiş iki onaltılık rakamla; boşlukların ise artı (+) imi ile değiştirildiği bir kodlama uygulanmış bir dizge döndürür. Bir HTML formundan gönderilen veriye de aynı kodlama uygulanır ve bu yolla elde edilen dizgenin biçemi application/x-www-form-urlencoded ortam türü olarak bilinir. Bu biçem, tarihsel sebeplerle boşlukların artı (+) imi ile kodlanmasıyla » RFC 3986 kodlamasından farklıdır (rawurlencode() işlevine bakınız).

Örnekler

Örnek 1 - urlencode() örneği

<?php
$userinput
= 'Data123!@-_ +';
echo
"UserInput: $userinput\n";
echo
'<a href="mycgi?foo=', urlencode($userinput), '">';
?>

Yukarıdaki örneğin çıktısı:

UserInput: Data123!@-_ +
<a href="mycgi?foo=Data123%21%40-_+%2B">

Örnek 2 - urlencode() ve htmlentities() örneği

<?php
$foo
= 'Data123!@-_ +';
$bar = "Not the same content as $foo";
echo
"foo: $foo\n";
echo
"bar: $bar\n";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo
'<a href="mycgi?' . htmlentities($query_string) . '">';
?>

Yukarıdaki örneğin çıktısı:

foo: Data123!@-_ +
bar: Not the same content as Data123!@-_ +
<a href="mycgi?foo=Data123%21%40-_+%2B&amp;bar=Not+the+same+content+as+Data123%21%40-_+%2B">

Notlar

Bilginize:

HTML öğeleri olarak ele alınabilecek değişken isimlerine karşı dikkatli olun. &amp, &copy and &pound gibi şeyler tarayıcı tarafından çözümlenir ve istenen değişken ismi yerine bu HTML öğesi kullanılır. Bu, W3C'nin yıllardır söyleye geldiği zorluklardan biridir. Bakınız: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2.

PHP, bağımsız değişken ayracının, W3C'nin önerdiği noktalı virgül olarak değiştirilmesini arg_separator.output php.ini yönergesi üzerinden destekler. Maalesef, çoğu tarayıcı form verisini noktalı virgül ayraçlı biçemde göndermemektedir. Daha taşınabilir bir yol, bağımsız değişken ayracı olarak & yerine &amp; kullanmaktır. Bunu sağlamak için PHP'nin arg_separator.output yönergesinde değişiklik yapmanız gerekmez. Yönergenin değerini & olarak bırakın, fakat URL'lerinizi htmlentities() veya htmlspecialchars() ile kodlayın.

Ayrıca Bakınız

add a note

User Contributed Notes 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