我一直在使用来自$ _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”中检索信息吗? (#)
答案 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格式。
答案 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解码。