PHP获取带#的Url的方法
本文最后更新于 3334 天前,其中的信息可能已经有所发展或是发生改变。

引子:

事情的经过是这样的。最近在做微信公众平台开发,其中有一个模块是实现微信授权登录。
页面A(链接为:domain.com/index.php/Store/route.html#/bbb/1/aaa)
微信授权接口文件(链接为:domain.com/index.php/Wechat/Oauth)
业务是这样的:
用户点击页面A,若检测到未授权登录,则跳转到微信授权接口文件,授权完成后再跳转回页面A。
 
很显然,在页面A检测到未授权,跳转前必须保存当前页面的Url。
那么问题来了,小伙伴用了AngularJs的路由。Url中是带有#的,服务器端不可能获取到整个Url,只能获取到domain.com/index.php/Store/route.html
尽管可以使用html5模式,把#去掉。但为了不大费周章,还是想了其他方法。
Js是可以获取包括hash值的整个Url的。所以我自然得想到使用Js存Cookie,然后用PHP来取。但是实践告诉我,这种方法不行。因为是先执行服务器脚本语言再执行Js的。那么要刷新2次页面才能看到Cookie被echo出来了。但是,亲,哥是要在A页面跳转到接口文件啊。这么一跳转,根本没办法存储到Cookie。
说了那么多“废话”,讲讲解决办法吧。
A页面:使用js获取到带#的整个Url,然后使用replace将#替换为任意字符串,比如|sharp|。然后将该Url作为参数,用window.location.href跳转到接口文件。
接口文件:$_GET获取到传过来的Url。再用PHP的方法将|sharp|替换回#。接着就可以做大事啦~~~
最后附上主要代码:
A页面
echo “<script>
var targetUrl = document.location.href;
targetUrl = targetUrl.replace(‘#’,’|sharp|’);
window.location.href=’http://domain.com/index.php/Wechat/Oauth?targetUrl=’+targetUrl
</script>”;
接口文件
$targetUrl =$_GET[‘targetUrl’];
$targetUrl = str_replace(‘|sharp|’,’#’,$targetUrl);

评论

  1. 十步之泽
    Windows Chrome
    8年前
    2016-10-13 17:54:40

    获取到了带#的url,但是传给微信之后,#号后的内容被微信忽略了。
    不知道博主有没有解决这个问题。

    • foam
      foam 博主
      Windows Chrome
      7年前
      2016-10-20 18:50:10

      你对url进行url_encode再传给微信就可以了。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇