PHP字符串与特殊字母的比较

PHP字符串与特殊字母的比较,php,arrays,string,string-comparison,strcmp,Php,Arrays,String,String Comparison,Strcmp,我有一个使用RESTAPI从woocommerce商店获取的属性数组。它看起来像: Array ( [0] => stdClass Object ( [id] => 6 [name] => Modelis [position] => 0 [visible] => 1 [variation] => 1 ) [1] => stdClass Object

我有一个使用RESTAPI从woocommerce商店获取的属性数组。它看起来像:

Array
 (
 [0] => stdClass Object
    (
        [id] => 6
        [name] => Modelis
        [position] => 0
        [visible] => 1
        [variation] => 1
    )

[1] => stdClass Object
    (
        [id] => 5
        [name] => Krāsa
        [position] => 1
        [visible] => 1
        [variation] => 1
    )

)
在这个数组中,我想找到名为“Krāsa”的项。由于它包含特殊字母“ā”,简单的比较不起作用:

foreach ($attributes as $item):
  if (!strcmp($item->name, 'Krāsa')):
    print_r('Names match');
  endif;
endforeach;
尽管数组中有名称Krāsa,但这样的if子句始终为false。也许这是我的背景不好,但我想知道,如何正确地比较这些字符串


非常感谢。

在某些情况下,当您的字符串编码遇到问题时,您可以将字符串转换为编码

foreach ($attributes as $item):
    if (strcmp(mb_convert_encoding($item->name, 'utf-8', 'auto'), mb_convert_encoding('Krāsa', 'utf-8', 'auto')) == 0):
        print_r('Names match');
      endif;
    endforeach;

嗯,如果我跑!strcmp'Krāsa','Krāsa'结果为真。在对字符串进行比较之前使用htmlspecialchars如何?^strcmp返回0,如果它们相同,则可以使用!我就是这么想的。但就我而言,你的假设从来都不是真的。这就是问题所在。它适用于没有特殊字母的属性。但是对于单词'Krāsa',mb_convertāu编码从$item->name输出'Krāsa',从硬编码字符串输出'Kr?sa'。我想这里的utf-8编码不正确。第二个参数是设置当前编码。您可以使用以下命令查看当前编码:echo mb_detect_encoding$str;