2016-09-16 9 views
3

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; 
} 
+0

classic XY?あなたの '$ names'が' returnTeachers() 'から返されたときに見えるものを投稿してください。それは配列ですか、何の配列ですか、結合ですか? ...おそらく、あなたのforeachの策定に単純な論理エラーがあるでしょう(つまり、UTF8の問題ではありません)。 – YvesLeBorg

+0

public static function returnTeachers(){ $ all = []; $ rs = Conection :: query( "SELECT firstname FROM teachers"); ($行= $ rs-> fetch_assoc()) } return $ nizSvih; } 特殊文字を使わずに名前を入力すると、正常に動作するため、返品は問題ではありません。 – EmJam

+0

申し訳ありませんが、私は誤って(再度見て)入力してください – EmJam

答えて

1

utf8_unicode_ciからいくつかのコードを追加すると、やや「一般的」であり、そのようなあなたはセルビアのために持っているものとして、特定の要件に従うことができません。

「セルビア人」照合は表示されませんが、十分に近いものがいくつかあります。 utf8_croatian_ciは別の「文字」としてCČĆを扱うhttp://mysql.rjweb.org/utf8_collations.html

注意を見てください。チェコ語、スロバキア語、ポーランド語(および他の国語)がその一部をしています。同義語はŽŠです。

Ðは、を除き、 utf8_unicode_520_ciを除く別の文字として扱われます。

他の照合順序の1つを選択します。 utf8_croatian_ciは、CČĆを区別する唯一のものであるため、必要なものに最も近いと思われます。

+0

まだ問題はありますが、とにかくありがとうございます。私はajaxとjQueryのコードを修正して、もう一度やり直します。 – EmJam

+0

更新: これは動作します、ありがとうございます! – EmJam