HP中$_SERVER[“REQUEST_URI”]中文乱码原因与解决方法

By admin at 2023-04-02 11:49:07 • 27点击

用PHP想获取整个URL的路径,然后再用“/"分隔,实现类似路由功能,获取URL相关参数。
<?php
$request_uri = $_SERVER["REQUEST_URI"];
结果,当URL中有中文的时候,路径就会变成如下,例如:
string(46) "/question/%E4%BB%98%E6%9D%B0%E5%8D%9A%E5%AE%A2"

原因:
原因其实也很简单,路径自动被“UrlEncode编码”过了,PHP还有相关的的UrlEncode编码函数:
urlencode(string)

解决方法:
既然有UrlEncode编码,肯定就有UrlEncode解码,PHP相关的UrlEncode解码函数:
urldecode(string)
例如:
$request_uri = urldecode($_SERVER["REQUEST_URI"]);
总结:
由于我没有去深入了解PHP源码,我个人猜测是在 $_SERVER["REQUEST_URI"] 这里,它默认自动就被UrlEncode编码过了。因为我直接用 $_GET 的时候,接受的参数是不会被编码的。

URL不解码也是可以的,但是需要注意两点:
1、访问的时候不是很方便,路径过长;如果你要做SEO,更加不利于优化
2、如果你要查数据库,URL编码传来的数据肯定要和数据库保证一致性,要么都编码,要么解码

目前尚无回复
该帖评论已关闭