【问题标题】:PHP string comparison with special lettersPHP字符串与特殊字母的比较
【发布时间】:2019-02-07 15:09:21
【问题描述】:

我有一系列属性,这些属性是使用 rest api 从 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 子句始终为假。也许这是我的背景不好,但我想知道,如何正确比较这些字符串?

非常感谢。

【问题讨论】:

  • 嗯,如果我运行!strcmp('Krāsa', 'Krāsa'),结果为真。
  • 在比较字符串之前使用htmlspecialchars怎么样?
  • ^ strcmp 如果它们相同则返回 0 所以可以使用 !

标签: php arrays string string-comparison strcmp


【解决方案1】:

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

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;

【讨论】:

  • 这就是我的想法。但在我的情况下,你的 if 永远不会是真的。那就是问题所在。它适用于没有特殊字母的属性。但是对于单词“Krāsa”,mb_convert_encoding$item->name 输出“Krāsa”,从硬编码字符串输出“Kr?sa”。我想 utf-8 在这里编码不正确..
  • 第二个参数是设置你当前的编码。您可以使用以下命令查看当前编码:echo mb_detect_encoding($str);
猜你喜欢
  • 2015-11-06
  • 2015-07-15
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多