php -- 解決php連接sqlserver2005中文亂碼問題(附詳細解決方法)


@_@~~

--php5.2

--phpstudy

--apache

--sqlserver2005

 

@_@~~問題描述

問題一:php連接sqlsever2005,輸入中文,然后查詢sqlserver中對應的數據,由於提交中文是UTF-8,而sqlserver的中文為GBK,所以字段無法匹配,沒有查詢結果。

問題二,php連接sqlsever2005,讀取數據表數據,由於中文是UTF-8,而sqlserver的中文為GBK,讀出來的中文字符顯示亂碼。

 

@_@**開始解決問題(#_#)~

第一,打開sqlserver2005的查詢分析器,code

SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')

運行,查看結果,顯示“936”,說明該數據庫的編碼為GBK

^_^附表,如下:

936 簡體中文GBK 
950 繁體中文BIG5 
437 美國/加拿大英語 
932 日文 
949 韓文 866 俄文 65001 unicode UFT-8

 

第二,打開php.ini,配置如下

mssql.charset = "utf-8"

 記得重啟服務器!!!!!!!

 

第三,在php文件中添加下面代碼,

<?php
   ……
   header("content-Type: text/html; charset=utf-8");
   ……
?>

 

第四,進行輸入數據的轉碼工作

數據表test如下:

id name type
1 TOM 聯通
2 JERRY 移動

 

 

 

模擬提交的變量為 type = '聯通', 對其進行轉碼

$type = '聯通';
$type = (iconv('UTF-8','GBK',$type));

sql 語句如下,

$result= mssql_query("select * from dbo.test where type = '$type' and name = 'TOM'", $conn);

 

第五,對查詢后的結果進行轉碼(核心代碼如下)

$res['type'] = iconv('GBK','UTF-8',$result['type']);
echo $res['type']; 

查看輸出,

聯通

顯示正常。

 

!!!如果需要將查詢結果封裝成JSON,且保證發送出來的JSON中文編碼正常!

------請接下去看第六,如不需要,可以跳過下面步驟。  

第六,將第五的代碼進行更改調整如下:

$res['stname'] = urlencode(iconv('GBK','UTF-8',$row['stname'])); 

然后,封裝JSON,發送出去

echo urldecode(json_encode($res));

@_@~完

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM