gpt4 book ai didi

php - 将来自数据库的 UTF-8 字符串与输入字符串进行比较 (PHP/SQL)

转载 作者:可可西里 更新时间:2023-11-01 08:39:37 24 4
gpt4 key购买 nike

我正在尝试比较两个 stirngs,一个来自输入,另一个来自数据库。我在数据库中有这个名称列表,我想检查该名称是否已存在于数据库中,但问题是来自塞尔维亚拉丁语的特殊字符(Č、Ć、Đ、Ž、Š)。连接具有 UTF-8 字符集 mysqli_set_charset($this->con, 'utf8'),数据库具有 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ć 的人不同。

附言当我从数据库回显名称时,特殊字符显示正常,不像问号符号。

编辑:从评论中添加一些代码

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

最佳答案

utf8_unicode_ci 有点“通用”,无法遵循特定要求,例如您对塞尔维亚语的要求。

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

请注意 utf8_croatian_ci 将 CČĆ 视为单独的“字母”。捷克语、斯洛伐克语和波兰语(以及其他国家)做了一些这样的事情。 ŽŠ 也是如此。

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

因此,选择其他排序规则之一。 utf8_croatian_ci 似乎最接近您的需要,因为它是唯一将 CČĆ 视为不同的.

关于php - 将来自数据库的 UTF-8 字符串与输入字符串进行比较 (PHP/SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com