@_@~~
--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));
@_@~完