比较PHP中的两个unicode字符串

时间:2011-07-28 07:28:13

标签: php string unicode utf-8 compare

我很难比较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)

2 个答案:

答案 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功能。

http://php.net/manual/en/language.types.string.php