我试图用这个函数检查希腊语中的两个句子:
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)“Συνδέσουμεχιλιάδες ανθρώπουςΠαρακολούθησε&amp; δράσεζωντανά24/ 7“
同时,我正在尝试找到编码问题
更新2: 输出是:
string(117) "Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7"
UTF-8
UTF-8
这两个字符都是utf
更新3 写入文件时的输出:
Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7
Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 24/7
答案 0 :(得分:2)
你可以尝试:
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)); }
答案 1 :(得分:1)
尝试使用PHP本机方法strcasecmp()
- http://php.net/strcasecmp。
答案 2 :(得分:1)
您可以使用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
答案 3 :(得分:-2)
是否存在编码问题?
尝试使用:
return (strcmp($target_line_three, $case_line_three) == 0);
strcmp()
区分大小写。对于不区分大小写的情况,请使用strcasecmp()