2つの攪拌を比較しようとしています.1つは入力から、もう1つはdatebaseからです。 データベースにこの名前のリストがあり、その名前がデータベースに既に存在するかどうかチェックしたいが、問題はserbian latin(Č、Ć、Đ、Ž、Š)の特殊文字です。接続にはUTF-8文字セットmysqli_set_charset($ this-> con、 'utf8')があり、DBにはutf-8_unicode_ci照合があります。入力文字列(PHP/SQL)とUTF-8文字列の比較
$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の「ジョコビッチ」のような名前を持っている、と私は入力して「ジョコビッチ」と入力した場合には、名前が存在しないことを言うだろう。私はincov()を使うことができません。なぜなら、C、ÈまたはČは異なる意味を持っているからです。 Colovićという名前の男は、Čolovićという名前の男と同じではありません。
P.S. DBから名前をエコーすると、疑問符記号のような特殊文字は普通のように見えます。
EDIT:コメント
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?あなたの '$ names'が' returnTeachers() 'から返されたときに見えるものを投稿してください。それは配列ですか、何の配列ですか、結合ですか? ...おそらく、あなたのforeachの策定に単純な論理エラーがあるでしょう(つまり、UTF8の問題ではありません)。 – YvesLeBorg
public static function returnTeachers(){ $ all = []; $ rs = Conection :: query( "SELECT firstname FROM teachers"); ($行= $ rs-> fetch_assoc()) } return $ nizSvih; } 特殊文字を使わずに名前を入力すると、正常に動作するため、返品は問題ではありません。 – EmJam
申し訳ありませんが、私は誤って(再度見て)入力してください – EmJam