두 개의 흔들림을 비교하려고합니다. 하나는 입력에서, 다른 하나는 datebase에서 비교하려고합니다. 데이터베이스에이 이름 목록이 있는데 그 이름이 이미 데이터베이스에 있는지 확인하려고하지만 문제는 세르비아어 라틴어 (Č, Ć, Đ, Ž, Š)의 특수 문자입니다. 연결에는 UTF-8 charset mysqli_set_charset ($ this-> con, 'utf8')이 있고 DB에는 utf-8_unicode_ci 데이터 정렬이 있습니다.입력 문자열과 함께 databese의 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에서 "노박 조 코 비치"와 같은 이름을 가지고, 그리고 그 이름이 존재하지 않습니다 말할 것이다 나는 입력에서 "노박 조 코 비치"를 입력합니다. C, Ć 또는 Č는 다른 의미가 있기 때문에 incov()를 사용할 수 없습니다. 이름 Colović와 남자 그것은 이름 Čolović를 가진 남자와 동일하지 않다.
P. DB에서 이름을 에코 할 때 특수 문자는 물음표 기호가 아닌 정상적으로 나타납니다.
편집 : 의견
public static function returnTeachers(){
$all = [];
$rs = Conection::query("SELECT firstname FROM teachers");
while($row = $rs->fetch_assoc()) {
array_push($all,$row);
}
return $all;
}
classic XY? 'returnTeachers()'에서 반환 할 때'$ names'가 어떻게 보이는지 게시 하시겠습니까? 그것 배열, 배열, 배열, 연관? ... 아마 foreach의 공식에 간단한 논리 오류가 있습니다 (즉, UTF8 문제가 아님) – YvesLeBorg
public static function returnTeachers() { $ all = []; $ rs = Conection :: query ("SELECT firstname FROM teachers"); while ($ row = $ rs-> fetch_assoc()) { array_push ($ all, $ row); } return $ nizSvih; } 특수 문자없이 이름을 입력하면 반환되므로 문제가되지 않습니다. – EmJam
죄송합니다. 우연히 엔터를 누르면 (다시 보입니다) – EmJam