真的出鬼了!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参数的值,无需转码。
本地编码环境一致
------解决方案--------------------
------解决方案--------------------兄弟糾結了半年了還在糾結?
答案就在你的條件裏
远程是linux 系统 Apache 的。
我本地 WIN XP ,Apache 系统的。
我曾經在以前碰過,兩臺服務器,一臺linux 一臺win,一樣是編碼問題 然後需要不同的處理。具體應該是跟系統的字符集什麼的有關,上面有人說了。
------解决方案--------------------机器是不会骗人的。不会见鬼,只是见bug.
让你们管运维的。把这个配置去了就行。
AddDefaultCharset UTF-8