Я думаю, что если в строке есть кирилица, не закодированная в UTF8, то substr воспринимает ее как бинарные данные. Поэтому описанный баг распостраняется и на этот случай. На локальном компе стоит PHP 4.4.0 и ни каких глюков не разу не было.
Скрипт представляет собой обычный шаблонизатор. В строку $str_cont_old загружется содержимое базового шаблона из файла, затем в теле цикла происходит поиск шаблонов заключенных в фигурные скобки и замена их содержимым соответствующего файла.
Вот код:
PHP:
скопировать код в буфер обмена
//$str_cont_old - исходная строка с HTML кодом и шаблонами //$str_cont_new - готовая строка для выдачи в браузер $e=0; while(true) { if(!$b=strpos($str_cont_old,'{',$e)) break; //Позиция откр. фиг. скобки. $e=strpos($str_cont_old,'}',$b); //Позиция закр. фиг. скобки //Считываем то что находится между скобками $tname=substr($str_cont_old, $b+1 , $e-$b-1 ); ........ ........ ........ //Производим замену $str_cont_new=str_replace('{'.$tname.'}' ,$cont_inc_tpl, $str_cont_new); }
Опытным путем установил, что в момент когда происходит ошибка strpos совершенно верно находит позиции открытой и закрытой скобок. А вот substr начинает считывать название шаблона не с $b+1 а на несколько символов дальше.
Например:
После обработки такого участка строки
'...<title>{title}</title>...'
функция substr должна вернуть имя шаблона $tname='title', а вместо этого я получаю $tname='/titl'(Отредактировано автором: 25 Сентября, 2008 - 13:46:49)
|