2016-09-16 60 views
3

我想比較兩種方法,一種來自輸入,另一種來自數據庫。 我在數據庫中有這個名稱列表,我想檢查數據庫中是否已經存在該名稱,但問題是塞爾維亞拉丁文中的特殊字符(Č,Ć,©,Ž,Š)。連接具有UTF-8字符集mysqli_set_charset($ this-> con,'utf8'),並且DB具有utf-8_unicode_ci排序規則。將數據庫中的UTF-8字符串與輸入字符串進行比較(PHP/SQL)

$names = Teachers::returnTeachers(); 
    if(isset($_GET['idRequest']) && $_GET['idRequest'] == 1) 
    { 
$firstName = trim($_GET['firstname']); 
$status = ""; 


    foreach($name as $names) 
{ 
    if(strtolower(trim($names['firstname'])) == $firstName) 
    { 
     echo "This name is already in DB"; 
     $status = "exist"; 
    } 
     echo "No name"; 
     $status="not exist"; 
} 

如果我有像「德約科維奇」在DB的名字,我在輸入輸入「德約科維奇」它會說,名稱不存在。我不能使用incov(),因爲C,Ć或Č有不同的含義。姓名Colović的男子與名字Čolović的男子不同。

P.S.當我使用DB回顯名稱時,特殊字符顯示爲正常,不像問號符號。

編輯:從意見

public static function returnTeachers(){ 
    $all = []; 
    $rs = Conection::query("SELECT firstname FROM teachers"); 
    while($row = $rs->fetch_assoc()) { 
     array_push($all,$row); 
    } 
    return $all; 
} 
+0

經典XY?請從'returnTeachers()'返回時發佈你的'$ names'看起來像什麼?它是一個數組,一個什麼數組,關聯? ...你在編寫你的foreach時可能有一個簡單的邏輯錯誤(即根本不是UTF8問題) – YvesLeBorg

+0

public static function returnTeachers(){ $ all = []; $ rs = Conection :: query(「SELECT firstnamename FROM teachers」); while($ row = $ rs-> fetch_assoc()) { array_push($ all,$ row); } return $ nizSvih; } 我確定返回不是問題,因爲當我輸入沒有特殊字符的名稱時它工作得很好。 – EmJam

+0

對不起,我不小心按了輸入(再看) – EmJam

回答

1

utf8_unicode_ci添加一些代碼是有點「通用」,並沒有遵循的具體要求,如您有什麼塞爾維亞。

我沒有看到'塞爾維亞'整理,但有幾個可能會接近。看看http://mysql.rjweb.org/utf8_collations.html

注意utf8_croatian_ci對待CČĆ作爲單獨的「字母」。捷克,斯洛伐克和波蘭(以及其他國家)也採取了一些措施。同上ŽŠ

Ð按每個排序規則作爲單獨的字母處理,但 utf8_unicode_520_ci除外。

因此,請選擇其他排序規則之一。 utf8_croatian_ci似乎最接近你所需要的,因爲它是唯一一個將CČĆ區分開來的區別。

+0

還是有問題,不過謝謝你,我會修正我的ajax和jQuery代碼,然後再試一次,我認爲它會起作用。 – EmJam

+0

更新: 它的工作原理,謝謝! – EmJam

相關問題