windows下面php pdo_odbc连接mssql2000更新中文乱码的处理分享
由于特殊原因,本人需要在windwos下面用php的pdo_odbc连接mssql2000结果pdo->execute() 更新数据,数据库内容是乱码,想了很多方法现在分享如下:
乱码原因:在windows下对不支持unicode utf-8编码的程序,会默认使用GBK编码,而实际上ODBC在php实现内貌似是不支持utf-8的,因为utf-8编码的字符串提交给ODBC无法执行。
1,程序文件是utf-8格式的时候:
utf8编码字符串转换成gb2312编码
$zzzyk="易做图头像设计";
$yizuotu=@iconv( "utf-8", "gb2312//IGNORE",$zzzyk);
//使用@易做图错误,如果转换字符串中,某一个字符在目标字符集里没有对应字符,那么,这个字符之后的部分就被忽略掉了;
//即结果字符串内容不完整,此时要使用//IGNORE
强行转换中文,入库以后就不是乱码
使用iconv()转码后处理插入的信息和查询的结果
$sql="select * from yizuotu_net where title='易做图'";
$sql=iconv('UTF-8', 'GBK', $sql);
我在本地测试:
解决方案是对Windows执行以下更改
控制面板>区域>管理>更改系统区域设置>选中“使用Unicode UTF-8获得全球语言支持是的
2,直接将程序代码文件全部另存 改成 ansi编码
总之不是万不得已,尽量不要这么玩,例如mssql 2000 以后的版本 又或者在 linux下面连接mssql 都有很多方法解决