Stripos возвращает false при использовании специальных символов

Я использую функцию stripos, чтобы проверить, находится ли строка внутри другой строки, игнорирование любых случаев.

Вот проблема:

stripos("ø", "Ø")

возвращает ложь. Пока

stripos("Ø", "Ø")

возвращает истину.

Как видите, похоже, что в этом случае функция НЕ выполняет поиск без учета регистра.

У функции те же проблемы с такими символами, как Ææ и Åå. Это датские иероглифы.


person foens    schedule 30.03.2011    source источник


Ответы (4)


Вместо этого используйте mb_stripos(). Он знает набор символов и будет обрабатывать многобайтовые наборы символов. stripos() — это пережиток старых добрых дней, когда был только ASCII, а все символы были только 1 байт.

person Marc B    schedule 30.03.2011
comment
Почему, ну почему эта функция не заявлена ​​как связанная со стрипосом... Тогда я бы и сам разобрался. Спасибо за помощь. - person foens; 30.03.2011
comment
Вы можете предложить его сопровождающим документации PHP. Эти страницы документа не заморожены на всю вечность. - person Marc B; 30.03.2011

Вам понадобится mb_stripos.

person awm    schedule 30.03.2011
comment
Как бы я ни хотел принять как ваш ответ, так и ответ Марка Б., я выбрал его, поскольку его ответ сопровождался объяснением. - person foens; 30.03.2011

Об этом позаботится mb_stripos.

person k to the z    schedule 30.03.2011

Как говорят другие решения, попробуйте сначала с mb_stripos(). Но если использование этой функции не помогает, проверьте кодировку вашего файла php. Преобразуйте его в UTF-8 и сохраните. Это помогло мне после нескольких часов исследований.

person Gustavo    schedule 15.06.2015