簡體   English   中英

平等不適用於PHP

[英]equality doesnt work with php

我試圖用這個函數檢查希臘語中的兩個句子:

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

當我傳遞以下兩個字符串時,我得到了這個:

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

但是這里的平等失敗了......我對這個結果都是假的,即使兩個句子都相似,為什么會這樣呢?

更新:

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

同時,我試圖找到一個編碼問題

更新2:輸出是:

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

UTF-8

UTF-8

兩個字符都是utf

寫入文件時更新3輸出:

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

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

你可以嘗試:

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

第二種選擇是使用多字節編碼不敏感的比較....

function mb_strcasecmp($target1, $target2, $encoding = null) {
    if (null === $encoding) { $encoding = mb_internal_encoding(); }
    return strcmp(mb_strtoupper($target1, $encoding), mb_strtoupper($target2, $encoding)); }

嘗試使用PHP本機方法strcasecmp() - http://php.net/strcasecmp

您可以使用strncmp比較字符的兩個字符串字符,當它們不相等時停止。 然后你可以確定哪個角色是不同的。 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

可能有編碼問題嗎?

試試這個:

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

strcmp()區分大小寫。 對於不區分大小寫,請使用strcasecmp()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM