Сравнение строк PHP со специальными буквами

У меня есть массив атрибутов, взятых из магазина woocommerce с использованием rest api. Это выглядит как:

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
    )

)

В этом массиве я хочу найти элемент с именем «Краса». Поскольку он содержит специальные буквы «а», простое сравнение не работает:

foreach ($attributes as $item):
  if (!strcmp($item->name, 'Krāsa')):
    print_r('Names match');
  endif;
endforeach;

Такое предложение if всегда ложно, хотя в массиве есть имя Krāsa. Может быть, это мой плохой фон, но я хотел бы знать, как правильно сравнивать такие строки?

Большое спасибо.

хм, если я запускаю !strcmp('Krāsa', 'Krāsa'), результат верный.

OK sure 07.02.2019 16:17

Как насчет использования htmlspecialchars перед сравнением строк?

dWinder 07.02.2019 16:18

^ strcmp возвращает 0, если они совпадают, поэтому можно использовать !.

dWinder 07.02.2019 16:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
277
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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;

Ну, это то, о чем я думал. Но в моем случае ваше если никогда не бывает правдой. Это проблема. Работает для атрибутов без специальных букв. Но для слова «Krāsa» mb_convert_encoding выводит «Krāsa» из $item->name и «Kr?sa» из жестко заданной строки. Я полагаю, что utf-8 здесь неправильная кодировка.

user2963789 07.02.2019 16:39

Второй параметр — установить текущую кодировку. Вы можете увидеть текущую кодировку, используя: echo mb_detect_encoding($str);

Peter 07.02.2019 16:57

Другие вопросы по теме