PHP+SQL_SERVER2005之乱码解决方案
2012-12-02 12:32
363 查看
环境
WIN7 64位;PHP5.3.13+Apache+ SQL Server 2005;利用系统DSN数据源+ODBC连接数据库;zend studio, UTF-8;问题
当处理中文信息时,插入数据库中的数据为乱码,读取到的数据显示在网页上也是乱码。解决方案
方案一
手工实现代码转换://写入:UTF-8 转 GBK function gbk2utf8($str) { return iconv('gbk', 'utf-8//IGNORE', $str); } //读取:GBK 转 UTF-8 function utf82gbk($str) { return iconv('utf-8', 'gbk//IGNORE', $str); }注意:
在HTML文件中一定要指定编码为UTF-8(GBK),否则会出现插入的数据没问题,便读取后显示在网页上的数据还是乱码。具体实现有两种方式:
方法一:直接在HTML中加入:
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP + SQL SERVER2005</title></head>
方法二:在PHP中加入
header("Content-type: text/html; charset=UTF-8");
完整的测试代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SQL SERVER 2005 DB Test< </title> </head> <body> <h1 align="center">SQL SERVER 2005 DB Test</h1> <?php function gbk2utf8($str) { return iconv('gbk', 'utf-8//IGNORE', $str); } function utf82gbk($str) { return iconv('utf-8', 'gbk//IGNORE', $str); } //之前已经建立好了系统DSN数据源:DBSTestAccess $conn = odbc_connect ("DBSTestAccess" , "", "", SQL_CUR_USE_ODBC ); //在数据库中已经建好一个表book $insertSql = 'INSERT INTO book (name, total) VALUES (\''.utf82gbk('测试28').'\', 100)'; odbc_exec($conn, $insertSql); $sql = "select * from book"; $rs = odbc_do ( $conn, $sql ); while ( odbc_fetch_row ( $rs ) ) { print "book名称:" .gbk2utf8(odbc_result ( $rs, "name" )); print "price:" .gbk2utf8(odbc_result ( $rs, "total" ))."<br>"; } odbc_close ( $conn ); ?> </body> </html>
方案二
将PHP代码、网页、数据库的编码都改为gbk或gb2312。这种方案更好。PHP代码:
在Zend Studio中选 windows->preferences->General->Workspace->Text file encoding,设置为GBK。
或者直接用文本编辑器将xxx.php文件转码为ANSI编码文档即可。
网页
<meta http-equiv="Content-Type" content="text/html; charset=gbk"> 或 <meta http-equiv="Content-Type" content="text/html; charset=gb2312">数据库:不用改动,其中文编码就是gbk
测试代码见另一篇博文:http://blog.csdn.net/taotaoyouarebaby/article/details/8259381
附:数据库环境建立
USE [exp_db] GO /****** 对象: Table [dbo].[book] 脚本日期: 12/02/2012 11:33:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[book]( [name] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [total] [int] NOT NULL ) ON [PRIMARY]
参考:
http://blog.csdn.net/gumanren/article/details/4691820相关文章推荐
- 在SQL Server 2005(2008)中用T-SQL插入中文数据时出现的问号或乱码的解决方案
- 使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题
- 在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法
- 安装Microsoft SQL server Management Studio Express 2005 错误码是29506解决方案
- 工作总结之PHP连接Microsoft SQL Server 2000/2005/2008
- SQL Server 2005 Service Pack 2 安全性更新(KB948109) 后 SQL Server Reporting Services 2005服务不能启动 解决方案
- SQL Server Express 2005 Beta 两处BUG及解决方案
- PHP连接Microsoft SQL Server 2000/2005/2008
- 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案
- 日文符号“・”插入sql-server2005乱码问题
- Microsoft SQL Server 2005 用户'sa'登录失败(错误18456)解决方案图
- 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案!!!!
- Sql Server 2005 与Sql Server Mobile(Sql server 2005 mobile Edition)数据同步步骤以及问题解决方案
- 日文符号“・”插入sql-server2005乱码问题
- 在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法
- 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案
- 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案[转]
- Microsoft SQL Server 2005 用户'sa'登录失败(错误18456)解决方案图
- win8安装MS Sql Server 2005 服务无法启动解决方案
- 在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法