前端提交的中文數據與後端數據庫無法正確匹配的問題
前端的使用GET方法將輸入框中的中文數據提交給後端:
$("#SearchButton").click(function(){
ajax("GET", "php/workerSearch.php?name=" + $("#SearchText").val());
})
後端將得到的數據對Mysql數據庫進行查詢,若有該用戶則將其信息取出返回給前端:
<?php
if(isset($_GET["SearchText"]))
{
header("Content-type: text; charset=gbk");
$link = mysqli_connect("localhost", "root", "123", "test");
mysqli_query($link, "set names gbk");
$searchText = trim($_GET["SearchText"]);
$sql = "SELECT number, tele FROM worker WHERE name = '$searchText'";
$rs_sql = mysqli_query($link, $sql);
if($rs = mysqli_fetch_array($rs_sql))
{
$data = array(
"number" => $rs["number"],
"tele" => $rs["tele"],
);
$json_data = json_encode($data);
echo $json_data;
}
else
{
echo "";
}
?>
出現的問題就是:即使輸入的中文數據確實在數據庫中存在,數據庫依舊返回匹配錯誤。
提交數據“小明”,檢查$sql變量發現匹配時的內容如下:
SELECT number, tele FROM worker WHERE name = ‘å°æ˜Ž’
問題出在了編碼上。
前端html頁面使用的是utf-8編碼格式
<meta charset="utf-8">
它表示的意思是瀏覽器應該以utf-8編碼來解析和顯示頁面。
而在後端調用數據庫時將編碼格式設置成了gbk
mysqli_query($link, "set names gbk");
它表示的意思是數據庫應該以gbk編碼來解析我傳入的數據,一個以utf-8提交的“小明”被數據庫以gbk解釋匹配,好比外國人買“pen”被中國店老闆聽成買“盆”一樣,當然會出現無法匹配的問題。
解決方法就是改變編碼:
// mysqli_query($link, "set names gbk");
mysqli_query($link, "set names utf8");