微信平台中get传递跳转链接-get值为网址-出现not find file等问题解决方法。

首先,项目使用的是pathinfo模式的网址,比如:http://www.xxx.com/Index/ucenter/变量名/变量值网址,这时候直接把网址放到变量值里是不可行的,第一个想法是将它urlencode编码以后传递。

通过php代码 $_SERVER['REQUEST_URI'] 取到的地址为/index.php?con=index&act=ucenter

结果编码以后的地址变成了 %2findex.php%3fcon%3dindex%26act%3ducenter,拼接后的跳转地址为:http://www.xxx.com/Index/ucenter/变量名/%2findex.php%3fcon%3dindex%26act%3ducenter

当直接访问的时候,因为碰到了参数值中的.php,服务器认为你是在访问%2findex.php这个文件,却又找不到,因此报not find file错误。

解决方法:

//把地址中的“.php”自定义编码加密一下,要不然直接作为get参数碰到xxx.php就会报找不到文件的错误,从而不能正常传值
$statestr = str_replace(".php","ASCII16ASCII112ASCII104ASCII112",$state);

继续执行,当我在微信中登录完成,最后一步需要跳转时,将上一步替换掉的.php再替换回来,再执行urldecode解码,然后用作跳转,这时出现白屏,查看网址后,网址为:http://www.xxx.com/%2findex.php%3fcon%3dindex%26act%3ducenter 

看到这个网址我就很奇怪,我明明把传递过来的路径已经urldecode解码了,为什么还是URL编码状态呢?,怎么检查都是清晰的思路:传递前编码-》替换.php-》传递中-》传递后替换回.php-》传递后解码-》跳转。传递前后一一对应,貌似没什么不对。来回检查了一遍,怀疑是在传递过程中,微信对我传递的这个URL编码过的参数又进行了一次URL编码,也就是说,如果我想要得到最终的真实结果,需要解码两次。

综上所述我最终的解决思路是:

传递前编码-》替换.php-》传递中-》传递后替换回.php-》传递后解码-》传递后解码后再次解码-》跳转

注:替换.php是为了解决not find file错误,

       两次解码是为了解决跳转后网址错误白屏的问题。

你可能感兴趣的:(get,微信,网址,值,跳转链接,notfindfile)