Кто нибудь сталкивался с этим ?
http://bugs.php.net/bug.php?id=45311
Как то можно его обойти?
Или заменить substr другой функцией?
1. Ch_chov - 24 Сентября, 2008 - 08:18:58 - перейти к сообщению
2. valenok - 24 Сентября, 2008 - 10:29:23 - перейти к сообщению
Поставить более новую версию php =)
(Добавление)
А если обращаться к строке через отдельные буквы ? Тоесть echo $data[0].$data[1] ;
(Добавление)
А если обращаться к строке через отдельные буквы ? Тоесть echo $data[0].$data[1] ;
3. Ch_chov - 24 Сентября, 2008 - 11:18:36 - перейти к сообщению
На хостинге PHP 5.2.6 и пропатчить нет возможности.
Мне кажется это приведет к значительному увеличению времени работы скрипта.
Функция substr находится во вложеном цикле.
Цитата:
А если обращаться к строке через отдельные буквы ?
Мне кажется это приведет к значительному увеличению времени работы скрипта.
Функция substr находится во вложеном цикле.
4. Джур - 24 Сентября, 2008 - 13:00:38 - перейти к сообщению
несовсем понял... где тут ошибка... хм...
substr с utf8 работает неправильно и это нормально...
mb_substr с utf8 работает и это правильно...
Но вот за каким лешим в utf8 строчку пихать не utf-ные символы я недопонимаю. Это же не простой набор байтов.
Ch_chov уточните плиз что вам сделать надо.
substr с utf8 работает неправильно и это нормально...
mb_substr с utf8 работает и это правильно...
Но вот за каким лешим в utf8 строчку пихать не utf-ные символы я недопонимаю. Это же не простой набор байтов.
Ch_chov уточните плиз что вам сделать надо.
5. Ch_chov - 24 Сентября, 2008 - 14:12:02 - перейти к сообщению
Я так понял, что баг проявляется тогда, когда смешиваются данные в разных кодировках.
Цитата отсюда: http://forum[dot]vingrad[dot]ru/forum/s/[dot][dot][dot]opic-226758[dot]html
Я сам не могу понять почему так происходит, у меня везде используется только ANSI
Причем баг проявляется не постоянно, а периодически 2-3 раза в сутки.
В том что глючит именно substr установил точно.
Цитата:
Проблема заключается в том, что в PHP 5.2.6 функции mb_substr() и substr() некорректно вырезают часть данных, если эти данные имеют хоть один символ кириллицы, не закодированный в UTF8.
Цитата отсюда: http://forum[dot]vingrad[dot]ru/forum/s/[dot][dot][dot]opic-226758[dot]html
Я сам не могу понять почему так происходит, у меня везде используется только ANSI
Причем баг проявляется не постоянно, а периодически 2-3 раза в сутки.
В том что глючит именно substr установил точно.
6. valenok - 24 Сентября, 2008 - 15:08:32 - перейти к сообщению
Тоесть у вас не бинарные данные вовсе ???
7. Ch_chov - 24 Сентября, 2008 - 17:31:17 - перейти к сообщению
Нет не бинарные и не UTF.
Обычная строка с кириллицей.
Обычная строка с кириллицей.
8. valenok - 24 Сентября, 2008 - 21:42:31 - перейти к сообщению
Тогда чего то вы не то рассказываете про баги. Там дело совсем в другом. Код показывайте.
9. Ch_chov - 25 Сентября, 2008 - 12:00:51 - перейти к сообщению
Я думаю, что если в строке есть кирилица, не закодированная в UTF8, то substr воспринимает ее как бинарные данные. Поэтому описанный баг распостраняется и на этот случай. На локальном компе стоит PHP 4.4.0 и ни каких глюков не разу не было.
Скрипт представляет собой обычный шаблонизатор. В строку $str_cont_old загружется содержимое базового шаблона из файла, затем в теле цикла происходит поиск шаблонов заключенных в фигурные скобки и замена их содержимым соответствующего файла.
Вот код:
Скрипт представляет собой обычный шаблонизатор. В строку $str_cont_old загружется содержимое базового шаблона из файла, затем в теле цикла происходит поиск шаблонов заключенных в фигурные скобки и замена их содержимым соответствующего файла.
Вот код:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- //$str_cont_old - исходная строка с HTML кодом и шаблонами
- //$str_cont_new - готовая строка для выдачи в браузер
- $e=0;
- while(true) {
- //Считываем то что находится между скобками
- ........
- ........
- ........
- //Производим замену
- }
Опытным путем установил, что в момент когда происходит ошибка strpos совершенно верно находит позиции открытой и закрытой скобок. А вот substr начинает считывать название шаблона не с $b+1 а на несколько символов дальше.
Например:
После обработки такого участка строки
'...<title>{title}</title>...'
функция substr должна вернуть имя шаблона $tname='title', а вместо этого я получаю $tname='/titl'