環境
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(
方法一:直接在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>
方案二
<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