我想比較兩種方法,一種來自輸入,另一種來自數據庫。 我在數據庫中有這個名稱列表,我想檢查數據庫中是否已經存在該名稱,但問題是塞爾維亞拉丁文中的特殊字符(Č,Ć,©,Ž,Š)。連接具有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;
}
經典XY?請從'returnTeachers()'返回時發佈你的'$ names'看起來像什麼?它是一個數組,一個什麼數組,關聯? ...你在編寫你的foreach時可能有一個簡單的邏輯錯誤(即根本不是UTF8問題) – YvesLeBorg
public static function returnTeachers(){ $ all = []; $ rs = Conection :: query(「SELECT firstnamename FROM teachers」); while($ row = $ rs-> fetch_assoc()) { array_push($ all,$ row); } return $ nizSvih; } 我確定返回不是問題,因爲當我輸入沒有特殊字符的名稱時它工作得很好。 – EmJam
對不起,我不小心按了輸入(再看) – EmJam