比较Database中的UTF-8字符串与输入字符串(PHP/SQL)

比较Database中的UTF-8字符串与输入字符串(PHP/SQL),php,mysql,utf-8,compare,Php,Mysql,Utf 8,Compare,我试图比较两个stirng,一个来自输入,另一个来自数据库。 我在数据库中有这个名字列表,我想检查这个名字是否已经存在于数据库中,但问题是来自塞尔维亚拉丁语的特殊字符(Ć,Ć,Đ,Ž,Š)。连接具有UTF-8字符集mysqli\u set\u字符集($this->con,'utf8'),DB具有UTF-8\u unicode\u ci排序规则 $names = Teachers::returnTeachers(); if(isset($_GET['idRequest']) &&

我试图比较两个stirng,一个来自输入,另一个来自数据库。 我在数据库中有这个名字列表,我想检查这个名字是否已经存在于数据库中,但问题是来自塞尔维亚拉丁语的特殊字符(Ć,Ć,Đ,Ž,Š)。连接具有UTF-8字符集mysqli\u set\u字符集($this->con,'utf8'),DB具有UTF-8\u unicode\u ci排序规则

   $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中有“NovakĐoković”这样的名字,我在输入中输入“NovakĐoković”,它会说这个名字不存在。我不能使用incov(),因为C、Ć或Ć有不同的含义。名字叫科洛维奇的人和名字叫乔洛维奇的人不一样

另外,当我回显数据库中的名称时,特殊字符显示正常,不像问号符号

编辑:从注释中添加一些代码

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

utf8\u unicode\u ci
有点“通用”,没有遵循特定的要求,例如您对塞尔维亚语的要求

我没有看到“塞尔维亚人”的分类,但有几个可能足够接近。看

注意,utf8_克罗地亚_ci将
C
Č
Ć
视为单独的“字母”。捷克人、斯洛伐克人和波兰人(以及其他人)做了一些。
Ž
Ž
也一样

Ð
被每个排序规则视为一个单独的字母,utf8_unicode_520_ci除外


因此,选择其他排序规则之一
utf8_克罗地亚_ci
似乎最符合您的需要,因为它是唯一将
C
Č
Ć
视为不同的工具。

经典XY?请发布从
returnTeachers()
返回的
$names
的外观?它是一个数组,一个什么数组,关联的。。。在foreach(即根本不是UTF8问题)公共静态函数returnTeachers(){$all=[];$rs=conconnect::query(“从教师中选择名字”);而($row=$rs->fetch_assoc()){array_push($all,$row)}返回$nizzvih;}我确信返回不是问题,因为当我输入没有特殊字符的名称时,它工作得很好
foreach($name作为$name)
trim($name['firstName']]
这两个值都被修剪,一个是表单数据库,一个是来自输入。$firstName=trim($\u GET['firstName']);(input)strtolower(trim($name['firstName'])-(如果是station,则是来自数据库的名称)还有一个问题,不过还是要谢谢你。我会修复我的ajax和jQuery代码,然后再试一次。我认为它会起作用。