2017-03-26 120 views
0

我需要比较两个字符串。它们在视觉上进行比较,但var_dump结果为其他。请帮帮我。比较两个字符串PHP

柱(8) “СИ.pdf” 字符串(7) “CИ.pdf”

如何正确他相提并论?

+2

最有可能的字符串是在不同的编码。你将不得不找出原因,以便将来可以防止这种事情发生。不_搜索一些自动编码转换,_不会工作。如果你想了解你所看到的,使用'hexeditor'。 – arkascha

+0

你必须['setlocale'](http://php.net/manual/en/function.setlocale.php) – Deadooshka

回答

1

使用mb_convert_encoding()将两个版本转换为合理的值(例如UTF8),然后使用mb_strstr()进行比较。

+0

Thx! mb_convert_encoding($ fileName)=== mb_convert_encoding($ item-> getName())为我工作 –

+1

这是不好的答案 – Deadooshka

+0

真的吗?为什么?它适用于OP。你有更好的建议吗? – mayersdesign

0

你的第一个字符串,"СИ.pdf",采用Cyrillic capital letter Es而第二,"CИ.pdf",有Latin capital letter C。这些是homoglyphs,并且检查它们的一种方式是使用Spoofchecker::areConfusable(),例如,

$a = "СИ.pdf"; 
$b = "CИ.pdf"; 

var_dump(
    $a === $b, 
    (new Spoofchecker())->areConfusable($a, $b) 
); 

输出:

bool(false) 
bool(true) 

Spoofchecker是PHP的intl extension这对ICU库的包装。 ICU的欺骗检查基于Unicode Technical Report #36Unicode Technical Standard #39