日期:2014-05-17  浏览次数:20446 次

PHP乱码的问题【注:不是连接数据库乱码】
环境:XP系统, PHP 5.3.4, Apache web server 2.2, mysql 5.5

PHP code

try{
   $mysqli = new mysqli("localhost","username","password","db1",3306); //当mysql服务没开启时...
   if($mysqli->connect_errno){
        //注:SqlException是直接继承Exception的自定义类。
        // echo $mysqli->connect_error; //乱码的来源...
        throw new SqlException($mysqli->connect_error,$mysqli->connect_errno); 
   }
}catch(SqlException $e){
   echo $e->getMessage(); //乱码
}



当mysql数据库服务没启动的时候,上面的php语句输出一堆乱码(错误号:2002)……

网上有调用$mysqli->query("set names gbk")等的需要使用$mysqli对象的都不行,因为$mysqli都还没连接,调用其它函数会报错……


(mysql数据库正常启动后,其它数据库连接错误显示的却是英文,不再出现乱码了……)

怀疑是XP系统下语系设置的问题,导致$mysqli->connect_error返回中文,结果变乱码了……但其它类型的数据库错误($mysqli->error)返回的却是英文……

请问下这种情况怎么处理啊?


先谢谢了~


------解决方案--------------------
在网页上吗? 先改变一下页面编码(浏览器菜单上)看看到底是什么编码及内容, utf8或gbk, 
然后如果connect_errno=2002就自己转一下编码...


也可以用自己的message代替该信息....


------解决方案--------------------
探讨
SqlException是直接继承Exception的自定义类。

------解决方案--------------------
是的 确实 这样
------解决方案--------------------
首先是你PHP的网页头文的显示的编码

然后记得set name UTF-8 或者GBK 或者GB2312 但是要和网页头里的一样
------解决方案--------------------
2002 就是 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
所以你完全可以不细究.

应该和你的mysql client api的版本及设置有关

实在想知道可以照楼上唠叨说的把信息贴上来

探讨

引用:
在网页上吗? 先改变一下页面编码(浏览器菜单上)看看到底是什么编码及内容, utf8或gbk,
然后如果connect_errno=2002就自己转一下编码...


也可以用自己的message代替该信息....


1.浏览器里改变成其它常用编码完全没变化……
2.可以那样判断,但是想搞清楚哪里出问题了...

------解决方案--------------------
今天学了,,想应该是你下载的数据库,不对汉字处理 啊,,记得是,一个是 V6 版本,还有一个是v9
------解决方案--------------------
用记事本打开文件 然后点:文件-另存为-编码选择UTF-8 最后就OK啦
------解决方案--------------------
又见乱码问题……你确认所有的文件格式都是UTF-8,页面字符集也是UTF-8么?
------解决方案--------------------
gbk 编码的:由于目标机器积极拒绝,无法连接。

mysql 客户端会根据你所使用的操作系统的默认语言产生本地化的错误信息