平等不适用于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
写入文件时的输出:
Συνδέσου με χιλιάδες ανθρώπους Παρακολούθησε & δράσε ζωντανά 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()
@Nikostrcmp
不会告诉您哪个字符是错误的字符,所以我使用了strncmp
。strcacmp()不是多字节安全的
return (strcmp($target_line_three, $case_line_three) == 0);