Поиск одной многобайтовой строки в другой многобайтовой строке

Я использую этот код для поиска одной строки utf-8 в другой строке utf-8:

if (strlen(mb_stristr($string1, $string2)) > 0)

но он всегда возвращает 0! Кто-нибудь знает лучшее решение этой проблемы? Обе строки могут быть комбинацией символов Юникода и не Юникода!


person King Julien    schedule 13.12.2010    source источник
comment
Я полагаю, вам просто нужно знать, встречается ли строка в другой строке или нет?   -  person John Parker    schedule 13.12.2010
comment
Отсутствует s во втором имени переменной.   -  person rik    schedule 13.12.2010
comment
Да, это правильно! Я просто хочу проверить, существует ли одна строка в другой строке или нет...   -  person King Julien    schedule 13.12.2010


Ответы (3)


Если вы не используете подстроку, не используйте strstr (или ее производные). Все, что вам нужно, это то, что строка существует, поэтому используйте mb_stripos :

if (mb_stripos($string1, $string2) !== false) {
person ircmaxell    schedule 13.12.2010

Почему бы просто не использовать mb_stripos?

Если вы не знаете исходную кодировку, вам может понадобиться использовать mb_detect_encoding и затем mb_convert_encoding в преобразовать каждую из строк в общую кодировку, но это должно быть довольно тривиально.

Тем не менее, вам нужно проверить на false в случае, если строка2 встречается в начале (т.е. в нулевой позиции) строки1.)

то есть: использовать...

if (mb_stripos($string1, $string2) !== false) {
    // $string2 was found within $string1
    ...
}
person John Parker    schedule 13.12.2010

if (mb_stristr($string1, $string2) !== false) echo "found $string2 in $string2";

Обратите внимание на безопасный оператор сравнения типов !==.

person rik    schedule 13.12.2010