thinkphp在不同pathinfo下的URL中出现中文乱码情况分析

[php] 2024-06-22 圈点219

摘要:thinkphp在不同pathinfo下的URL中出现中文乱码情况分析思路来源:经过实践,得知此接收到的是gb2312的中文编码。如果需要可以转换一下可以得到中文。一种是乱码,无论怎么改编码都是乱码,初步估计不是编码问题;另一种是如果“中文”中空格会报404错误(实验出来的)。 经过分析,很有可能是因为PHP不支持中文路径的问题有关。

thinkphp在不同pathinfo下的URL中出现中文乱码情况分析思路来源:

1,在使用thinkphp的时候,使用非rewrite模式时,在使用URL生成即用U("M/ACT",array("keyword"=>"中文"))方法生成URL的时候,即会生成“/M/ACT.html?keyword=中文”如果参数上面的“中文”是中文字符,接收到的变量将会是乱码。经过实践,得知此接收到的是gb2312的中文编码。如果需要可以转换一下可以得到中文。


2,在使用thinkphp的时候,使用rewrite模式时,在使用URL生成即用U("M/ACT",array("keyword"=>"中 文"))方法生成URL的时候,即会生成“/M/ACT/keyword/中文”如果参数上面的“中文”是中文字符,情况有两种,一种是乱码,无论怎么改编码都是乱码,初步估计不是编码问题;另一种是如果“中文”中空格会报404错误(实验出来的)。 经过分析,很有可能是因为PHP不支持中文路径的问题有关。


3,对2的补充说明,如果2中的中文是urlencode("中文")的内容,即“/M/ACT/keyword/urlencode('中文')”,将会出现更大的错误,因为有%号,经过多次的测试发现%,-等等符号在里面出现都会有意想不到的变化。而"."可以存在。所以如果在这种情况下,要使用中文的url,可以对中文进行如下的处理:先urlencode中文,然后将%全部化成".",再请求;取数据时相反取回来即可。




thinkphp  rewrite  pathinfo  中文乱码  

感谢反馈,已提交成功,审核后即会显示