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

今天用原生的PHP,想获取整个URL的路径,然后再用“/"分隔,实现类似路由功能,获取URL相关参数。于是用了:

<?php
$request_uri = $_SERVER["REQUEST_URI"];

 

结果,当URL中有中文的时候,路径就会变成如下,例如:

string(46) "/fujieace/%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 = $_SERVER["REQUEST_URI"];
var_dump(urldecode($request_uri));

 

总结:

由于我没有去深入了解PHP源码,我个人猜测是在 $_SERVER["REQUEST_URI"] 这里,它默认自动就被UrlEncode编码过了。因为我直接用 $_GET 的时候,接受的参数是不会被编码的。

 

URL不解码也是可以的,但是需要注意两点:

1、访问的时候不是很方便,路径过长;如果你要做SEO,更加不利于优化

2、如果你要查数据库,URL编码传来的数据肯定要和数据库保证一致性,要么都编码,要么解码

    A+
发布日期:2020年12月12日 16:57:28  所属分类:PHP
最后更新时间:2020-12-12 16:57:28
付杰
  • ¥ 79.0元
  • 市场价:99.0元
  • ¥ 498.0元
  • 市场价:498.0元
  • ¥ 0.0元
  • 市场价:99.0元
  • ¥ 79.0元
  • 市场价:129.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: