【问题标题】:PHP URL decode GETPHP URL 解码 GET
【发布时间】:2012-11-27 13:58:11
【问题描述】:

我一直在对来自 $_get 的编码 URL 变量使用 URL 解码。

我目前面临的问题是我有一个这样编码的 URL: blah.php?url=http%3A%2F%2Fm.youtube.com%2F#/watch?feature=player_embedded&v=zd7c5tQCs1I&desktop_uri=%2Fwatch%3Fv%3Dzd7c5tQCs1I%26feature%3Dplayer_embedded

我不确定这是哪种编码,有人可以帮助我吗?当我对此只使用“urldecode”时,它只会返回m.youtube.com

编辑:我的问题不是 url 解码不起作用,如果我手动输入这个编码的 URL 并使用 urldecode(),它就可以工作,但是当这个编码的 url 在实际的页面 url 中并且我使用 _GET 函数时我尝试对其进行解码,它会删除 URL 中“#”之后的所有内容。

<?php print urldecode($_GET["url"]);?>

返回

"http://m.youtube.com/"

而不是

"http://m.youtube.com/#/watch?feature=player_embedded&v=zd7c5tQCs1I&desktop_uri=/watch?v=zd7c5tQCs1I&feature=player_embedded"

我认为问题在于井号未编码,如果我刷新页面,它会删除井号及其之后的所有内容,那么我该如何解决这个问题?即使有井号,我还能从“GET”中检索信息吗? (#)

【问题讨论】:

    标签: php get decode urlencode urldecode


    【解决方案1】:

    它被编码成ASCII格式。

    http://www.w3schools.com/tags/ref_urlencode.asp

    【讨论】:

    • @Charles php.net/urlencode 没有提到 ASCII 格式,这就是我给出那个链接的原因
    • 谢谢您的回答!那么 ASCII 格式,是否有一个 PHP 函数来对此进行解码,或者我是否必须构建一个充满字符串替换函数的快速引擎? :)
    • 当我将编码的 URL 作为字符串但由于某种原因在 URL 栏中有它并且我使用 _GET 函数时它不起作用。
    • 问题是井号未编码到 URL 中,我无权更改他们创建的 URL 的编码,那么我该如何解决这个问题?
    【解决方案2】:

    这种编码称为百分比编码URL编码。您可以使用 urldecode 对其进行解码。 (例如:http://phpfiddle.org/lite/code/0nj-198

    【讨论】:

    • 这在字符串中有效,但是当我在 url 中有它并且我使用 _get 函数时它不起作用。
    • 问题是井号未编码到 URL 中,我无权更改他们创建的 URL 的编码,那么我该如何解决这个问题?
    【解决方案3】:

    所以这是问题所在,井号 (#) (Hash) 没有被编码...因为我无法返回并重新编码它我必须使用 javascript(例如 alert(window.location .hash);) 在散列之后向我发送完整的 URL,然后我将其附加到 PHP 的 URL 版本,然后我使用 PHP 中的查找和替换函数将“#”替换为“%23”,然后我使用urldecode 方法,它返回完整正确的 url 解码。

    【讨论】:

      【解决方案4】:

      问题是完整链接有多个=标志,浏览器无法确定,其他=标志只是引用url=参数。 在您的情况下,首先,您需要在将链接提供给url= 参数之前使用函数:

      ========================= 1) JAVASCRIPT ======================
      <script type="text/javascript">
          var mylink = encodeURIComponent('http://testest.com/link.php?name=sta&car=saab');
          document.write("http://yoursite.com/url=" + mylink);
      </script>
      
      
      ========================= 2)or PHP ===========================
      <?php
          $mylink = 'http://testest.com/link.php?name=sta&car=saab';
          echo 'http://yoursite.com/url='.urlencode($mylink);
      ?>
      

      所以,你的输出(url 参数)会变成这样

      http://yoursite.com/url=http%3A%2F%2Ftest.com%2Flink.php%3Fname%3Dsta%
      

      所以,url 参数将获取编码后的 url。 之后,您的 .php 文件需要解码该“url”参数-

      <?php
      $varr = $_GET['url'];
      $varr = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($varr)); 
      $varr = html_entity_decode($varr,null,'UTF-8');
      echo $varr;
      ?>
      

      这会给你正确的价值

      【讨论】:

        【解决方案5】:

        我在 php.net 上阅读了有关 urldecode 函数的信息,他们说超全局 $_get 已经解码,例如:“超全局 $_GET 和 $_REQUEST 已经解码。在 $_GET 或 $_REQUEST 中的元素上使用 urldecode()可能会产生意想不到的危险结果。”

        【讨论】:

        • 确实如此。这是来自 PHP.net 的引用 - The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results(来源:php.net/manual/en/function.urldecode.php
        猜你喜欢
        • 1970-01-01
        • 2011-08-05
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多