【发布时间】:2011-10-14 21:17:55
【问题描述】:
我一直在比较 PHP 中的两个 unicode 字符串,它们都包含特殊的字符 'ö'。一个字符串来自$_GET,另一个是文件系统的文件夹名称(scandir())。两个字符串似乎都和我一样,做一个
var_dump($filter);
var_dump($tail . '/' . $k);
它们也显示了它们的相等性,但具有不同字符串长度(?!):
string '/blöb' (length=7)
string '/blöb' (length=6)
我的 sn-p 比较它们如下所示:
if($filter == ($tail . '/' . $k)) {
/* ... */
}
这是怎么回事?
附加信息:$tail是一个空字符串:
string '' (length=0)
【问题讨论】:
-
print_r(unpack("H*",$k))在您的两种情况下返回什么? -
请记住,有些文件系统使用 NFD(或接近它),您可能正在考虑使用 NFC。如果要进行二进制比较,则需要标准化为同一事物。但是对文本进行二进制比较是不明智的。您需要使用 UCA 进行文本比较。上周在 OSCON 看到我的seven-language talk on Unicode。
标签: php string unicode utf-8 compare