GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Downloads
  • Documentation
  • Get Involved
  • Help
  • Getting Started
  • Introduction
  • A simple tutorial
  • Language Reference
  • Basic syntax
  • Types
  • Variables
  • Constants
  • Expressions
  • Operators

This view

  • Original page
  • New address

GeezerVison is showing www.php.net — PHP: urldecode - Manual

PHP 8.6.0 RC5 available for testing
    urlencode »
    « rawurlencode
    • Preface
    • Function Reference
    • Other Basic Extensions
    • URLs
    • URL Functions

    urldecode

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

    urldecode — Decodes URL-encoded string

    Description

    function urldecode(string $string): string

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

    Parameters

    string

    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

    • urlencode() - URL-encodes string
    • rawurlencode() - URL-encode according to RFC 3986
    • rawurldecode() - Decode URL-encoded strings
    • » RFC 3986

    Found A Problem?

    Learn How To Improve This Page • Submit a Pull Request • Report a Bug
    +add a note

    User Contributed Notes 5 notes

    up
    down
    36
    alejandro at devenet dot net ¶
    15 years ago
    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
    up
    down
    13
    Visual ¶
    20 years ago
    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.
    up
    down
    7
    tomas at penajaca dot com dot br ¶
    23 years ago
    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");
    }
    up
    down
    1
    Joe ¶
    18 years ago
    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')
    up
    down
    -2
    bloodjazman at gmail dot com ¶
    6 years ago
    "+" replaced by space according to HTML x-www-form-url-encoded media type 
    see http://www.faqs.org/rfcs/rfc1866.html
    +add a note
    • URL Functions
      • base64_​decode
      • base64_​encode
      • get_​headers
      • get_​meta_​tags
      • http_​build_​query
      • parse_​url
      • rawurldecode
      • rawurlencode
      • urldecode
      • urlencode
    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.