Alb*_*haw 3 php get decode urlencode urldecode
我一直在使用$ _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"中检索信息吗?(#)
问题是完整链接有多个=符号,并且浏览器无法确定其他=符号仅涉及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);
?>
Run Code Online (Sandbox Code Playgroud)
所以,你的输出(url参数)将是这样的
http://yoursite.com/url=http%3A%2F%2Ftest.com%2Flink.php%3Fname%3Dsta%
Run Code Online (Sandbox Code Playgroud)
所以,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;
?>
Run Code Online (Sandbox Code Playgroud)
这将给你正确的价值
我在php.net上读到了urldecode函数,他们说超级全局$ _get已经被解码了,ex:"超级全局$ _GET和$ _REQUEST已经被解码.在$ _GET或$ _REQUEST中的元素上使用urldecode()可能会有意外和危险的结果."