0

この関数と等しいギリシャ語の2つの文をチェックしようとしています:

   private function process_line_three($target_line_three,$case_line_three){
      $target_line_three=trim($target_line_three);
       $case_line_three=trim($case_line_three);
      echo "<br/><br/>";
       var_dump($case_line_three);
        echo "<br/><br/>";
        echo mb_detect_encoding($target_line_three);
        echo "<br/><br/>";
         echo mb_detect_encoding($case_line_three);
       //$this->print_chars_not_equal($target_line_three,$case_line_three);

   return strcasecmp($target_line_three, $case_line_three)==0;
   }

次の 2 つの文字列を渡すと、次のようになります。

Line 3: case Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7==Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7

しかし、ここでは平等に失敗します..両方の文が似ているにもかかわらず、その結果でfalseを返します..なぜそうなのですか?

アップデート :

var_dump($case_line_three); string(117) "Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7"

その間、エンコーディングの問題を見つけようとしています

更新 2: 出力は次のとおりです。

string(117) "Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7" 

UTF-8

UTF-8

両方の文字がutfです

ファイルに書き込むときのUPDATE 3出力:

Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε &amp; δράσε ζωντανά 24/7

Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7
4

4 に答える 4

2

あなたは試すことができます:

if(strcmp ($target1 , $target2 ) == 0);

2 番目の選択肢は、マルチバイト エンコーディングのインセンシティブな比較を使用することです....

function mb_strcasecmp($target1, $target2, $encoding = null) {
    if (null === $encoding) { $encoding = mb_internal_encoding(); }
    return strcmp(mb_strtoupper($target1, $encoding), mb_strtoupper($target2, $encoding)); }
于 2012-06-13T09:10:32.767 に答える
1

strncmp2つの文字列を文字ごとに比較し、等しくない場合は停止するために使用できます。次に、どの文字が異なるかを判断できます。levenshtein何文字違うか教えてくれるかもしれません。

$a = 'Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7';
$b = 'Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7';

$i=1; $l=strlen($a); $equals=true;
while ($i<=$l && $equals) {
    if (strncmp($a, $b, $i) != 0) {
        $equals = false;
    } else {
        $i++;
    }
}
if ($equals) {
    echo 'Strings are equal';
} else {
    echo 'Character '.$i.' is not equal';
}

文字列は私にとって同じなので、おそらくエンコーディングの問題です。mb-detect-encoding問題のある文字のエンコーディングを確認するために使用できますhttp://www.php.net/manual/en/function.mb-detect-encoding.php

于 2012-06-13T09:15:42.797 に答える
1

PHP ネイティブ メソッドを使用してみてくださいstrcasecmp()- http://php.net/strcasecmp

于 2012-06-13T09:10:13.960 に答える
-2

エンコーディングの問題がありますか?

これを使用してみてください:

return (strcmp($target_line_three, $case_line_three) == 0);

strcmp()大文字と小文字が区別されます。大文字と小文字を区別しない場合は、strcasecmp()

于 2012-06-13T09:17:15.237 に答える