我很难比较PHP中的两个unicode字符串,它们都包含特殊字符'ö'。一个字符串来自$_GET
,另一个字符串是文件系统的文件夹名称(scandir()
)。两个字符串似乎都等于我,制作了
var_dump($filter);
var_dump($tail . '/' . $k);
在他们身上也显示了他们的平等,但是不同的字符串长度(?!):
string '/blöb' (length=7)
string '/blöb' (length=6)
我的代码片段比较如下:
if($filter == ($tail . '/' . $k)) {
/* ... */
}
这里发生了什么?
其他信息: $tail
是一个空字符串:
string '' (length=0)
答案 0 :(得分:3)
请参阅此处:http://en.wikipedia.org/wiki/Unicode_equivalence并使用此:http://www.php.net/manual/en/class.normalizer.php
你可能在较长的字符串中有一个分解的字符,意思是o,然后是一个覆盖前一个字符的变音符号组合字符。
规范化器功能将解决这类问题。
作为旁注,如果您将其用于等效(例如用户名),您应该始终规范化您的输入 - 您希望确保两个人不选择相同的用户名,即使字符串的二进制表示发生不同)。
答案 1 :(得分:-1)
你能尝试通过utf8_encode()解析它们并在那里检查它们吗? PHP不支持unicode,因此建议使用utf8_encode / decode来实现一些基本的Unicode功能。