PHP URL解码GET

时间:2012-12-10 06:37:24

标签: php get decode urlencode urldecode

我一直在使用来自$ _get。

的编码网址变量进行网址解码

我面临的当前问题是我有一个像这样编码的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”中检索信息吗? (#)

5 个答案:

答案 0 :(得分:9)

问题是完整链接有多个=符号,而浏览器无法确定其他=符号仅指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;
?>

将为您提供正确的值

答案 1 :(得分:7)

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

答案 2 :(得分:0)

它被编码为ASCII格式。

请参阅http://www.w3schools.com/tags/ref_urlencode.asp

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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