Вставка пробелов в строки в utf-8/multibyte кодировке

pashik

Guest
Вставка пробелов в строки в utf-8/multibyte кодировке

Привет всем.
Есть небольшая проблемка.
Надо вставить пробел если длина строки без пробелов и переводов кареток больше 30 символов через каждые 30 символов.
родной wordwrap не работает.

эта функция тоже не пашет:)
PHP:
function utf8_wordwrap($str,$len,$what){ 
  $from=0; 
  $str_length = preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty); 
  $while_what = $str_length / $len; 
  while ($i <= round($while_what)) { 
    $string = preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                            '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', '$1',$str); 
    $total .= $string.$what; 
    $from = $from+$len; 
    $i++; 
  } 
  return $total; 
}
может кто-нибудь помочь/подсказать?
 

kvf77

Red Devil
pashik

правила прочитай форума и оформи код как положено - никто не будет смотреть эту непонятную партянку
 

SiMM

Новичок
PHP:
function utf8_tipa_wordwrap($str,$len=80,$what="\r\n"){
  return preg_replace('#[^\s]{'.$len.'}#su',"$0{$what}",$str);
}
?
Не совсем то - но хоть что-то и как отправная точка.
 

pashik

Guest
Автор оригинала: SiMM
PHP:
function utf8_tipa_wordwrap($str,$len=80,$what="\r\n"){
  return preg_replace('#[^\s]{'.$len.'}#su',"$0{$what}",$str);
}
?
Не совсем то - но хоть что-то и как отправная точка.
очень даже похоже, только ситает все символы в том числе и переводы строки
пробовал так сделать:
function utf8_wordwrap($str,$len=10,$what=" "){
return preg_replace('#[^\s\n\r]{'.$len.'}#su',"$0{$what}",$str);
}
но с переводом строки все равно проблемы
 

pashik

Guest
Да я не дружу с регулярными выражениями.

если ввожу символы в utf-8 или multibyte - совсем не работает :-(

попробовал сделать так:
function str_rarefy($str,$len=10,$what=" "){
return preg_replace('#[^\x32]{'.$len.'}#su',"$0{$what}",$str);
}

но меняет почему-то следующий символ после пробела или пробел на фигню какую-то меняется. может в юникоде пробел с чем-то что-то значит.
 

SiMM

Новичок
> в utf-8 или multibyte
Выбери что-то одно. UTF-8 - лишь подмножество мультибайтовых кодировок. И функция была предназначена именно для неё.
Тем не менее, всё работает. И в изначальном варианте - тоже.
PHP:
echo iconv('UTF-8','CP1251',utf8_tipa_wordwrap(iconv('CP1251','UTF-8',"АБВ\rГДЕ\nЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"),10));
 

pashik

Guest
под виндой все вроде работает, а когда пытаюст на линухе - не работает.
ведь РНР один и тот же.
 

SiMM

Новичок
> не работает
Телепаты - в отпуске.
PHP FAQ: Ничего не работает! Что делать???
+ [m]reference.pcre.pattern.modifiers[/m]
u (PCRE_UTF8)

Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблоны обрабатываются как UTF8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ.
 
Сверху