将databese的UTF-8字符串与输入字符串进行比较(PHP / SQL)

时间:2016-09-16 13:49:47

标签: php mysql utf-8 compare

我正在尝试比较两个搅拌器,一个来自输入,另一个来自数据库。 我在数据库中有这个名字列表,我想检查这个名字是否已经存在于数据库中,但问题是来自塞尔维亚拉丁语(Č,Ć,Đ,Ž,Š)的特殊字符。 Connection有UTF-8字符集mysqli_set_charset($ this-> con,'utf8'),DB有utf-8_unicode_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,Ć或Č有不同的含义。名字叫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; 
 }

1 个答案:

答案 0 :(得分:1)

utf8_unicode_ci有点“通用”,不符合具体要求,例如您对塞尔维亚人的要求。

我没有看到“塞尔维亚”整理,但有几个可能足够接近。看http://mysql.rjweb.org/utf8_collations.html

请注意,utf8_croatian_ci将CČ以及Ć视为单独的“字母”。捷克,斯洛伐克和波兰(以及其他国家)也做了一些。同样适用于ŽŠ

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

所以,选择其他一个排序规则。 utf8_croatian_ci似乎与您的需求最接近,因为它是唯一一个将CČ以及Ć视为不同的内容。