前端提交的中文數據與後端數據庫無法正確匹配的問題

前端提交的中文數據與後端數據庫無法正確匹配的問題

前端的使用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");
發佈了29 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章