PHP+SQL_SERVER 2005の乱符号化ソリューション
3091 ワード
環境
WIN 7 64ビット;PHP5.3.13+Apache+ SQL Server 2005;システムDSNデータソース+ODBCを利用してデータベースに接続する.zend studio, UTF-8;
に質問
中国語情報を処理する場合、データベースに挿入されたデータは文字化けし、読み込まれたデータはウェブページに表示されても文字化けしている.
ソリューション
シナリオ1
コード変換を手動で実行するには、次の手順に従います.
注意:
HTMLファイルでは必ずUTF-8(GBK)としてエンコードするように指定してください.そうしないと、挿入されたデータに問題がなく、読み込んだ後にページに表示されるデータが文字化けしてしまいます.具体的な実現には2つの方法があります.
方法1:HTMLに直接追加する:
方法2:PHPに入れる
完全なテストコード:
シナリオ2
PHPコード、ウェブページ、データベースの符号化は、gbkまたはgb 2312に変更される.この案はもっとよい.
PHPコード:
Zend Studioでwindows->preferences->General->Workspace->Text file encodingを選択し、GBKに設定します.
あるいは直接テキストエディタでxxxを使用します.phpファイルはANSI符号化ドキュメントにトランスコードすればよい.
Webページ
データベース:変更する必要はありません.その中国語の符号化はgbkです.
テストコードは別のブログを参照してください.http://blog.csdn.net/taotaoyouarebaby/article/details/8259381
附:データベース環境の構築
参照先:
http://blog.csdn.net/gumanren/article/details/4691820
WIN 7 64ビット;PHP5.3.13+Apache+ SQL Server 2005;システムDSNデータソース+ODBCを利用してデータベースに接続する.zend studio, UTF-8;
に質問
中国語情報を処理する場合、データベースに挿入されたデータは文字化けし、読み込まれたデータはウェブページに表示されても文字化けしている.
ソリューション
シナリオ1
コード変換を手動で実行するには、次の手順に従います.
// :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)としてエンコードするように指定してください.そうしないと、挿入されたデータに問題がなく、読み込んだ後にページに表示されるデータが文字化けしてしまいます.具体的な実現には2つの方法があります.
方法1:HTMLに直接追加する:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PHP + SQL SERVER2005</title></head>
方法2: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>
シナリオ2
PHPコード、ウェブページ、データベースの符号化は、gbkまたはgb 2312に変更される.この案はもっとよい.
PHPコード:
Zend Studioでwindows->preferences->General->Workspace->Text file encodingを選択し、GBKに設定します.
あるいは直接テキストエディタでxxxを使用します.phpファイルはANSI符号化ドキュメントにトランスコードすればよい.
Webページ
<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