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

@_@~~php

--php5.2html

--phpstudysql

--apache數據庫

--sqlserver2005apache

 

@_@~~問題描述json

問題一:php鏈接sqlsever2005,輸入中文,而後查詢sqlserver中對應的數據,因爲提交中文是UTF-8,而sqlserver的中文爲GBK,因此字段沒法匹配,沒有查詢結果。服務器

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

 

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

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

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));

@_@~完

相關文章
相關標籤/搜索