我最近写了一个简单的页面,从浏览器传入中文参数(test.php?name = test),无论如何设置utf-8页面,它都会显示乱码. 解决方案很少,但是问题的原因是什么?没有人深入研究这个问题. 出于好奇php 过滤乱码,有必要确切地找出是什么原因造成的,这也是一个经验点!
首先看一下简单的测试代码:
测试结果如下:
代码声明响应内容的编码为utf-8,并且显示的内容确实是乱码. 在这里,请注意var_dump输出的变量的长度仅为4. 显然,在utf-8编码下,两个汉字的长度必须大于4个字节. 然后,让我们看一下Firefox的URL来访问此页面
FireFox将自动对中文URL进行编码,因此我们可以看到测试变为%B2%E2%CA%D4. 显然,这里的单词是两个字节,这是中文编码格式,例如gb2313,gbk而不是UTF-8编码. 如果我们将页面的编码切换为gbk,则中文参数将正常显示,请参见下图
接下来我们进行另一个测试,代码如下:
form>
测试结果,通常显示为:
那么,什么原因导致了这个问题?
答案是浏览器的默认编码可以解决问题. 我们都使用中文系统. 浏览器的默认编码自然会设置为本地化. 例如,我自己的计算机上IE和FireFox的默认编码均为gb系列.
当浏览器请求用户输入URL时,URL中的中文将以默认编码格式发送,而不是默认以页面编码格式发送. 这就是为什么页面上带有中文的链接正常并且我们手动输入的原因. 链接
字符乱码的原因. 同样,如果将浏览器的默认编码调整为utf-8,则输入URL中的中文将按照utf-8进行编码.
除上述情况外,在以下情况下也会发生这种情况:
如果将由gbk编码的页面生成的地址链接到utf-8页面,则gbk页面的中文将按照gbk格式进行编码并传输到下一页,那么,乱码后肯定会出现乱码utf-8编码已收到.
IIS的URL重写模块. 重写的中文编码也是gbk. 如果您的页面是utf-8编码的php 过滤乱码,则重写参数将无效. 在这种情况下,我们需要使用PHP的内置转码功能来处理编码问题:
选项1:
选项2:
本文地址:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-222200-1.html