Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Поиск подстроки


Автор: новичок 2.4.2003, 23:45
Нужно найти подстроку в строке без учера регистра.
На локальном компе находит, а на серверах нет.
То же самое, но с латинскими буквами, работает нормально, а
вот с кирилицей нет...
Это особенность php под юниксом такая или что ?


$s="СтРоКа";
$s1=strtolower($s);
$l="ТР";
$l1=strtolower($l);
$pos=strpos($s1,$l1);

if ($pos === false) print "Not found"; else print "pos=$pos";

Автор: Devorior 3.4.2003, 00:22
попробуй конвертнуть в KOI8-R : $s = convert_cyr_string($s, "w", "k");

Автор: новичок 3.4.2003, 01:28
Цитата(Devorior @ 3.4.2003, 00:22)
попробуй конвертнуть в KOI8-R : $s = convert_cyr_string($s, "w", "k");

так у меня и так все в KOI-8... Если у меня файл в кодировки кои-8, то все равно надо конвертировать ?

Автор: BlackWolf 3.4.2003, 03:42
Не знаю попробовал и на Windows и на Unix - все работает.
Взял весь твой пример и просто вставил его в скрипт выдает : pos = 1

Автор: новичок 3.4.2003, 04:15
Цитата(BlackWolf @ 3.4.2003, 03:42)
Не знаю попробовал и на Windows и на Unix - все работает.
Взял весь твой пример и просто вставил его в скрипт выдает : pos = 1

а я на двух серверах попробовал - и ни на одном не работаетsad.gif(
прям мистика какая-то....

Автор: Devorior 3.4.2003, 08:09
да, у меня тоже везде работало =\

Автор: VVP 3.4.2003, 10:08
Слушай, а у теба в последней строке кода 3 равно или опечатка? Надо бы 2

Автор: Foxx 3.4.2003, 10:21
Цитата
Слушай, а у теба в последней строке кода 3 равно или опечатка? Надо бы 2


Это не очепятка smile.gif Это функция появилась в PHP4 и означает тождественную проверку (точное определение не помню).

Автор: Mark.dll 3.4.2003, 16:04
Цитата(Foxx @ 3.4.2003, 02:21)
Цитата
Слушай, а у теба в последней строке кода 3 равно или опечатка? Надо бы 2


Это не очепятка smile.gif Это функция появилась в PHP4 и означает тождественную проверку (точное определение не помню).

=== проверяет точно ли равно
полезно использовать, т.к. при == пустые строки считаются за 0 и наоборот
только вот не равно почему-то не пашет... я имею ввиду !=== Хотя в книге именно так и написано.

А если по теме: наверное просто дело в php.ini или настройках локалей... хотя я в этом точно не разбираюсь.

Автор: Mark.dll 3.4.2003, 16:06
Хотя.... были случаи у меня, когда именно === запарывались. попробуй заменить на ==

Автор: новичок 3.4.2003, 20:36
Цитата(Mark @ 3.4.2003, 16:06)
Хотя.... были случаи у меня, когда именно === запарывались. попробуй заменить на ==

результат работы функции strpos в php4 только
так и можно проверить (===). А (==) ничего не даст.
Ведь нулевое значение, тоже результат.

А в php3 результат работы этой функции
проверяется вот так:

if (is_string ($pos) && !$pos) // подстрока не найдена

А в php4 эта конструкция не работает, по крайней мере
у меня.

А что касается самой проблемы, то на серверах где я пробовал
свой скрипт, функция strtolower() не обрабатывает русские буквы.
Почему - не понятно. Я написал свою функцию strtolow() и все
заработало, но хотелось бы все таки использовать библиотечную
функцию...

Автор: Mark.dll 3.4.2003, 22:09
Вырезка из мануала: Note that 'alphabetic' is determined by the current locale. This means that in i.e. the default "C" locale, characters such as umlaut-A (Ä) will not be converted.

Тоесть дело в локали... измени её, если это разрешено.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)