Home >Backend Development >PHP Tutorial >真的出鬼了!PHP接收网址中的中文参数,永远乱码!解决办法

真的出鬼了!PHP接收网址中的中文参数,永远乱码!解决办法

WBOY
WBOYOriginal
2016-06-13 10:06:36911browse

真的出鬼了!PHP接收网址中的中文参数,永远乱码!
就一个简简单单的文件 kw.php 文件全部内容如下:

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php print_r($_GET);


文件 kw.php的文件编码UltreEdit另存为UTF-8 NONE BOM头,网页编码UTF-8

+++++++++++++++++++++++++++++++++++++++++++++++++
情况如下:
(1)浏览器firefox,网址为 kw.php?kw=中国人民解放军
(或自动变成 kw.php?kw=%D6%D0%B9%FA%C8%CB%C3%F1%BD%E2%B7%C5)输出的kw的值是乱码的,然后把浏览器的编码调整为GBK系列或者GB2312系列的,显示正常。
点击浏览器查看当前文档的编码,编码是UTF-8。[IE浏览器也是一样乱码,非得把浏览器调成GBK编码查看,才显示出原来的文字]

(2)浏览器firefox,将kw.php的文档另存为ANSI编码,输入这些都显示正常了。……

很奇怪啊。以前从来都没遇到过这样的事情,都是直接 urlencode,然后接受直接urldecode的,网页编码UTF-8,文档编码 UTF-8 NONE BOM HEADER的,今天却突然发生了这样的情况,在远处服务器上面测试和在本地测试都是这样,在家里的电脑里面和公司的电脑里面测试都是这样的,乱码的……
真的是出鬼了啊。以前出现这样的情况,网页编码和文档编码都统一称为UTF-8的就都没事情了。
现在却死活不行……


------解决方案--------------------
(1)远程服务器里面:用urldecode 得到的tag参数还必须换成 UTF-8编码的转码一次。

被接收的URL系统是否GBK ,远程服务器是否UTF-8;这样可能出现乱码

(2)本地localhost里:直接用urldecode 就可以得到tag参数的值,无需转码。

本地编码环境一致

------解决方案--------------------
探讨
是这样,a.php里面有一个连接 是 中国人民解放军,但是在 tags.php里面却
(1)远程服务器里面:用urldecode 得到的tag参数还必须换成 UTF-8编码的转码一次。
(2)本地localhost里:直接用urldecode 就可以得到tag参数的值,无需转码。

另外我发现这些编码都被变成了GB系列的URLENCODE编码,很奇怪的。


------解决方案--------------------
兄弟糾結了半年了還在糾結?

答案就在你的條件裏
远程是linux 系统 Apache 的。
我本地 WIN XP ,Apache 系统的。

我曾經在以前碰過,兩臺服務器,一臺linux 一臺win,一樣是編碼問題 然後需要不同的處理。具體應該是跟系統的字符集什麼的有關,上面有人說了。
------解决方案--------------------
机器是不会骗人的。不会见鬼,只是见bug.
让你们管运维的。把这个配置去了就行。
AddDefaultCharset UTF-8
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn