Глюк в строковой функции strlen

Параноикъ

Новичок
Глюк в строковой функции strlen

PHP:
<?php 
$str = "привет";
echo "Привет без пробела = " . strlen($str) . " символа(ов)<br>"; // 6
$str = " Привет";  echo "Привет с пробелом = " . strlen($str) . "символа(ов)"; // 7 
?>
Сам файл в ANSI (в UTF все работает нормально).

Результат функции следующий:

Привет без пробела = 2 символа(ов)
Привет с пробелом = 4 символа(ов)

Один раз из 5-6 выдает нормальный результат. И-за чего возникает глюк?

PHP Version 5.2.6
 

SiMM

Новичок
Такой код что выдаёт?
PHP:
$str = "\xEF\xF0\xE8\xE2\xE5\xF2"; 
echo "Привет без пробела = " . strlen($str) . " символа(ов)<br>"; // 6 
$str = "\x20".$str;
echo "Привет с пробелом = " . strlen($str) . " символа(ов)"; // 7
 

phprus

Moderator
Команда форума

Параноикъ

Новичок
Автор оригинала: phprus
mbstring.func_overload - имеет значение не равное 0, а echo mb_internal_encoding(); выводит utf-8?
Да.

Вот настройки mbstring



-~{}~ 03.11.09 14:29:

Спасибо всем, исправил на ISO-8859-1 и в ANSI все стало норм работать.
 

phprus

Moderator
Команда форума
Параноикъ
Я думаю, что более правильным было-бы отключить mbstring.func_overload, а в случае реальной необходимости работы с многобайтовыми кодировками непосредственно использовать mb_*-функции у которых параметром передавать нужную кодировку.

А то подсовывание ISO-8859-1 может потенциально провести к проблемам, связанным, например, с изменением регистра текста на русском языке, или на языке букв которого нету в кодировке ISO-8859-1.
 

Параноикъ

Новичок
Отключил mbstring.func_overload.

Проблема остается тогда актуальной. Неделю назад обновлялся сервер. Какие библиотеки могли быть обновлены, после чего стали глючить строковые функции?
 

phprus

Moderator
Команда форума
Параноикъ
Отключил mbstring.func_overload.

Проблема остается тогда актуальной
Те после прописывания mbstring.func_overload = 0 в php.ini проблема не решилась?
А apache (если у тебя mod_php) перезапускал? Что после этого говорит phpinfo()?
 

Параноикъ

Новичок
phprus
Те после прописывания mbstring.func_overload = 0 в php.ini проблема не решилась?
А apache (если у тебя mod_php) перезапускал? Что после этого говорит phpinfo()?
с mbstring.func_overload = 0 - глюки не ушли.
Апач естественно дергаю после каждого апдейта конфигов.

После удаления пакета php-mbstring-5.2.6-1.el5.remi, строковые функции стали корректно работать.
Вот теперь думаю откатывать все php библиотеки назад или разбираться с php-mbstring-5.2.6-1.el5.remi

Что посоветуете?
 

phprus

Moderator
Команда форума
с mbstring.func_overload = 0 - глюки не ушли.
Апач естественно дергаю после каждого апдейта конфигов.
А ты правишь тот конфиг, который у тебя реально используется? Посмотри в phpinfo(), какой конфиг на самом деле использует php и изменилось ли значение mbstring.func_overload в выводе phpinfo() после изменения конфига и перезапуска сервера?
А какие файлы предоставлял пакет php-mbstring-5.2.6-1.el5.remi?
 

Параноикъ

Новичок
[www@www packages]# /usr/bin/php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

/etc/php.ini его и правлю
mbstring.func_overload в phpinfo - изменяется

php-mbstring-5.2.6-1.el5.remi предоставляет файл конфиг и сам модуль.

----

Обновил php до версии 5.2.11, теперь все работает отлично. Надеюсь больше глюков не будет. Спасибо за помощь.
 
Сверху