strpos. Не могу понять, что за ошибка.
Код:
while ((($subs_start = strpos($rettext, "{", $pos)) != 0) && (($subs_end = strpos($rettext, "}", $subs_start)) != 0)) {
$subs = substr($rettext, $subs_start + 1, $subs_end - $subs_start - 1);
if (eregi("[[:alnum:]]+(\.[[:alnum:]]+)*", $subs)) {
$labels = explode(".", $subs);
while(list($index, $label) = each($labels)) {
if ($index == 0) $val = $GLOBALS[$label];
else $val = $val[$label];
}
$rettext = substr_replace($rettext, $val, $subs_start, $subs_end - $subs_start + 1);
$pos = $subs_end + 1;
}
}
$subs = substr($rettext, $subs_start + 1, $subs_end - $subs_start - 1);
if (eregi("[[:alnum:]]+(\.[[:alnum:]]+)*", $subs)) {
$labels = explode(".", $subs);
while(list($index, $label) = each($labels)) {
if ($index == 0) $val = $GLOBALS[$label];
else $val = $val[$label];
}
$rettext = substr_replace($rettext, $val, $subs_start, $subs_end - $subs_start + 1);
$pos = $subs_end + 1;
}
}
обычно с пустой строкой (ту которую искать) проблем не было, но в одном месте стала появляться ошибка Offset not contained in string. Что она означает и изза чего она происходит никак не могу понять...
Второе. А если '{' в обрабатываемой строке нет? Ты в курсе, что strpos вернет тогда false? Понятно, что ты на != 0 надеешся, но лично бы !== false сделал.
Третье. А алгоритм пересмотреть не думал? Больше уж у тебя тут понаворочено с кучей переменных которые возможно и не нужны. Хотя конечно может в контексте всего скрипта это и нужно, но все же сомневаюсь. Регялярки будут и компактнее и удобнее. Несмотря даже на тормознутость.
Сюда же добавлю излюбленное "ereg в PHP скоро не будет, поэтому используйте preg"
Дополню, в 6 версии)
я и пытался понять, где, нашел, ошибка была в while ((($subs_start = strpos($rettext, "{", $pos)) != 0) ....... Разобрался, поставил вместо $pos - 0. $pos было лишним. И изза него и ошибка была.
[quote=alekciy]Второе. А если '{' в обрабатываемой строке нет? Ты в курсе, что strpos вернет тогда false? Понятно, что ты на != 0 надеешся, но лично бы !== false сделал.[/quote]
Спасибо, про false незнал.
[quote=alekciy]Третье. А алгоритм пересмотреть не думал? Больше уж у тебя тут понаворочено с кучей переменных которые возможно и не нужны. Хотя конечно может в контексте всего скрипта это и нужно, но все же сомневаюсь. Регялярки будут и компактнее и удобнее. Несмотря даже на тормознутость.[/quote]
Если про это:
Код:
while(list($index, $label) = each($labels)) {
if ($index == 0) $val = $GLOBALS[$label];
else $val = $val[$label];
}
if ($index == 0) $val = $GLOBALS[$label];
else $val = $val[$label];
}
то тут врядли получится через регулярки. У меня здесь последовательность, например {page.title} наменяется на значение глобальной переменной (вернее элемента массива) $page["title"]
Кстати про preg тоже спасибо, буду иметь ввиду.
Цитата: HexEdit
Если про это:
то тут врядли получится через регулярки. У меня здесь последовательность, например {page.title} наменяется на значение глобальной переменной (вернее элемента массива) $page["title"]
Не только про это. Я вообще о всем приведенном тут коде.
А мне вот думается получится. Тем более, что я так понимаю у тебя эти данные укладываются в определенный шаблон /{[a-z\.]+}/i