php不区分大小写的俄语字符比较

时间:2012-08-11 11:08:17

标签: string comparison case

如何比较俄语字符不敏感的情况。 我试过了:

if(strcasecmp($content->title, 'О нас') == 0){
        $about=$content->title;
    }

以及

if(strtolower($content->title) == strtolower('О Нас')){
        $about=$content->title;
    }

他们两个都没有用。如果我在同一'case'中创建两个字符串,则返回true,否则返回false。 $ content->标题从Mysql数据库返回'ОНас',第二个字符串也是'ОНас'但是如果我使用上述比较之一进行第二次str'Онас'并返回false,为什么?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不知道为什么,但找到了一个使用mb_strtolower函数的工作解决方案:

mb_strtolower($content->title) == mb_strtolower('О Нас')

我猜测为什么第一个选项不起作用:

来自strtolower docs:

  

请注意,'alphabetic'由当前区域设置决定。这意味着,例如在默认的“C”语言环境中,不会转换umlaut-A(Ä)等字符。

来自mb_strtolower docs:

  

与strtolower()相比,'alphabetic'由Unicode字符属性决定。因此,此函数的行为不受区域设置的影响,并且它可以转换任何具有“字母”属性的字符,例如A-umlaut(Ä)。

还要确保两个可比较的字符串使用相同的编码(字符串文字使用源文件编码),或者您可以使用mb_strtolower函数的第二个参数来设置每个字符串的编码。