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