比较Database中的UTF-8字符串与输入字符串(PHP/SQL)
我试图比较两个stirng,一个来自输入,另一个来自数据库。 我在数据库中有这个名字列表,我想检查这个名字是否已经存在于数据库中,但问题是来自塞尔维亚拉丁语的特殊字符(Ć,Ć,Đ,Ž,Š)。连接具有UTF-8字符集mysqli\u set\u字符集($this->con,'utf8'),DB具有UTF-8\u unicode\u ci排序规则比较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']) &&
$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代码,然后再试一次。我认为它会起作用。