Не удаётся вырезать участок строки.

neoweb

Новичок
Не удаётся вырезать участок строки.

Не могу разобраться, почему так работает substr:

PHP:
echo '<br>Строка:'.$stat[$i].'<br>';
$stat[$i] = substr($stat[$i], 0, 30);
echo 'Выход:'.$stat[$i].'<br>';
Строка:2324. Сумма:1.0 грн. 27/02 22:15 Футбол. Фрайбург - Мюнхен-1860: Фрайбург(победа) 1.95 2:1 К выплате: 1.95 грн.
Выход:2324. Сумма:1.0 грн.

Т.е. с нулевого по 20, а не по 30. Тогда как всего в строке намного больше символов.

PHP:
echo '<br>Строка:'.$stat[$i].'<br>';
$stat[$i] = substr($stat[$i], 70, 30);
echo 'Выход:'.$stat[$i].'<br>';
выводит:

Строка:2324. Сумма:1.0 грн. 27/02 22:15 Футбол. Фрайбург - Мюнхен-1860: Фрайбург(победа) 1.95 2:1 К выплате: 1.95 грн.
Выход: 27

Подскажите плз. в чем причина.
 

McSimm

Новичок
utf8 ?

-~{}~ 03.03.06 17:18:

другими словами мультибайтовая кодировка символов.
когда один символ можте быть представлен более чем одним байтом.

substr не знает это у вас один мультибайтный или несколько однобайтных символов
 

440hz

php.ru
а есть в строке \r\n теги или то-нить еще?

покажи вывод не из броузера а из блокнота
 

neoweb

Новичок
А как можно удалить большое количество пробелов между словами в строке?
$stat[$i] = preg_replace('[\s+]', ' ', $stat[$i]);
Как то без регулярных....???
 

garlian

Новичок
Автор оригинала: neoweb
А как можно удалить большое количество пробелов между словами в строке?
$stat[$i] = preg_replace('[\s+]', ' ', $stat[$i]);
Как то без регулярных....???
Можно воспользоваться ещё функцией strtok();

PHP:
$string = "This is an example    string";
$tok = strtok($string," ");
while ($tok) 
{
        $tok .= strtok(" ");
}
echo $tok;
Результат будет Thisisanexamplestring, таким образом ты получишь строку полностью без пробелов и неважно сколько их между словами.
Ещё вариант проверять в строке каждый символ является ли он пробелом, если да убирать пробел.
 

Andreika

"PHP for nubies" reader
garlian
интересно ) а я еще круче придумал )
PHP:
 $str = 'dsds 12345 fdfsd wew';
 $s = strlen($str);
 for ($i=0; $i<$s; $i++) {

    if ($str[$i]==' ') {

       $str = substr($str,0,$i).substr($str,$i+1);
       --$s;
    }
 }
а через регулярные выражения или str_replace пусть #@$% делают!
 

TheBattle

Новичок
А можно ещё в процессе trim использовать и автоматически определять новую длину строки, так будет короче.
 
Сверху