3

我一直在对来自 $_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”中检索信息吗?(#)

4

5 回答 5

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;
?>

这会给你正确的价值

于 2013-03-26T13:39:07.803 回答
9

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

于 2013-09-05T09:13:47.687 回答
0

它被编码为 ASCII 格式。

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

于 2012-12-10T06:41:36.893 回答
0

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

于 2012-12-10T18:45:36.673 回答
0

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

于 2012-12-10T21:34:46.650 回答