urldecode

(PHP 4, PHP 5)

urldecodeDecodes URL-encoded string

Description

string urldecode ( string $str )

Decodes any %## encoding in the given string. Plus symbols ('+') are decoded to a space character.

Parameters

str

The string to be decoded.

Return Values

Returns the decoded string.

Examples

Example #1 urldecode() example

<?php
$query 
"my=apples&are=green+and+red";

foreach (
explode('&'$query) as $chunk) {
    
$param explode("="$chunk);

    if (
$param) {
        
printf("Value for parameter \"%s\" is \"%s\"<br/>\n"urldecode($param[0]), urldecode($param[1]));
    }
}
?>

Notes

Warning

The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results.

See Also

Коментарии

urldecode does not decode "%0"  bypassing it. I can cause troble when you are working with fixed lenght strings.

You can you the function below.

function my_urldecode($string){

  $array = split ("%",$string);

  if (is_array($array)){
    while (list ($k,$v) = each ($array)){
       $ascii = base_convert ($v,16,10);
       $ret .= chr ($ascii);
    }
 }
 return ("$ret");
}
2003-07-21 02:14:13
http://php5.kiev.ua/manual/ru/function.urldecode.html
Автор:
If you are escaping strings in javascript and want to decode them in PHP with urldecode (or want PHP to decode them automatically when you're putting them in the query string or post request), you should use the javascript function encodeURIComponent() instead of escape(). Then you won't need any of the fancy custom utf_urldecode functions from the previous comments.
2006-05-18 15:02:28
http://php5.kiev.ua/manual/ru/function.urldecode.html
Автор:
It's worth pointing out that if you are using AJAX and need to encode strings that are being sent to a PHP application, you may not need to decode them in PHP.

<?php
echo stripslashes(nl2br($_POST['message']));
?>

Will properly output a message sent with the javascript code if the message is encoded:

message = encodeURIComponent(message)

And is sent with an AJAX POST request with the header:
ajaxVar.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
2008-04-03 14:11:33
http://php5.kiev.ua/manual/ru/function.urldecode.html
When the client send Get data, utf-8 character encoding have a tiny problem with the urlencode.
Consider the "º" character. 
Some clients can send (as example)
foo.php?myvar=%BA
and another clients send
foo.php?myvar=%C2%BA (The "right" url encoding)

in this scenary, you assign the value into variable $x

<?php
$x 
$_GET['myvar'];
?>

$x store: in the first case "�" (bad) and in the second case "º" (good)

To fix that, you can use this function:

<?php
function to_utf8$string ) {
// From http://w3.org/International/questions/qa-forms-utf-8.html
   
if ( preg_match('%^(?:
      [\x09\x0A\x0D\x20-\x7E]            # ASCII
    | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
    | \xE0[\xA0-\xBF][\x80-\xBF]         # excluding overlongs
    | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
    | \xED[\x80-\x9F][\x80-\xBF]         # excluding surrogates
    | \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
    | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
    | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
)*$%xs'
$string) ) {
        return 
$string;
    } else {
        return 
iconv'CP1252''UTF-8'$string);
    }
}
?>

and assign in this way:

<?php
$x 
to_utf8$_GET['myvar'] );
?>

$x store: in the first case "º" (good) and in the second case "º" (good)

Solve a lot of i18n problems.

Please fix the auto-urldecode of $_GET var in the next PHP version.

Bye.

Alejandro Salamanca
2010-12-14 20:27:03
http://php5.kiev.ua/manual/ru/function.urldecode.html
"+" replaced by space according to HTML x-www-form-url-encoded media type 
see http://www.faqs.org/rfcs/rfc1866.html
2020-04-16 12:37:55
http://php5.kiev.ua/manual/ru/function.urldecode.html

    Поддержать сайт на родительском проекте КГБ