平等不适用于php

平等不适用于php,php,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_dum

我试图用希腊文检查两个句子是否与此函数相等:

   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;
   }
但是平等在这里失败了。。我在结果上返回false,尽管两句话都很相似。。为什么会这样

更新:

变量转储($case\u line\u three);字符串(117)“∑νΔέσονμεχιλιάΔες” ανθρώπος∏αρακολούθησε&Δράσεζωντανά24/7”

同时,我试图找到一个编码问题

更新2: 输出为:

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

UTF-8

两个字符都是utf

更新3 写入文件时的输出:

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

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

尝试使用PHP本机方法
strcasecmp()
-。

您可以尝试:

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

您可以使用
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';
}
$a='∑νΔέσονμεχιλζΔεςανθρρώπος∏ακολοθσε&Δρράσεζωνττν24/7';
$b='∑νΔέσονμεχιλιάΔεςανθρθπποΓ∏ακοθησε&Δράσεζωηταν24/7';
$i=1$l=斯特伦($a)$等于等于真;

而($i是否存在编码问题

尝试使用以下方法:

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

strcmp()
区分大小写。如果不区分大小写,请在使用UTF-8时使用
strcasecmp()

,尝试使用var_dump()不使用echo来显示这两个值使用mb字符串比较,因为字符不正常,它返回1,我猜是真的。您报告的字符在视觉上是相等的。我们不知道函数进程_line_three()的作用。此时,我怀疑罪魁祸首是符号(&)。执行var_dump()正如@Mark Baker建议调用未定义函数strcomp()一样,它返回给我的结果是:ΔεςwebcamΔωμμτα=E=Ζωντανάwebcam chat rooms | Gr.ImLive.com结果:2没有调用函数
strcomp
。你可能的意思是
strcmp
。对不起,这是strcmp(),而不是strcomp()@dmitrymakovetd如果strmp()或者strcasecmp()精确返回0-
return(strcasecmp($target\u line\u three,$case\u line\u three)==0)
您是在本地服务器上执行此操作的吗?PHP服务器运行在什么操作系统上?好吧,您已经解决了问题,但第二个选项应该可以工作…只需重新检查您的代码,这是一个潜在的解决方案谢谢..我现在就试试..所有内容都应该是utf..我从数据库中获取数据..它具有utf8\U unicode\U ci的排序规则,并且我有一个lso将我的所有查询设置为UTF这是一个可怕的解决方案,因为它只执行重新实现
strcmp()
@Niko
strcmp
不会告诉您哪个字符是错误的字符,所以我使用了
strncmp
。strcacmp()不是多字节安全的
return (strcmp($target_line_three, $case_line_three) == 0);