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

timoshenkov

Новичок
вот код проверял на японском работает

PHP:
function utf8_wordwrap($str, $width, $break,$cut = false){
	 if(!$cut){
	 	$regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.',}\b#U';
	 } else {
	 	$regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#';
	 }

	 if(function_exists('mb_strlen')){
	  	$str_len = mb_strlen($str,'UTF-8');
	  } else {
	  	$str_len = preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty);
	  }

	  $while_what = ceil($str_len / $width);
	  $i = 1;
	  $return = '';

	  while ($i < $while_what){
		  preg_match($regexp, $str,$matches);
		  $string = $matches[0];
		  $return .= $string . $break;
		  $str = substr($str,strlen($string));
		  $i++;
	  }

 return $return.$str;
}


взята вот от сюда

-~{}~ 29.11.06 07:50:

есть один минус эта функция разбивает html теги

к примеру
PHP:
$str='hello<br/>'
$str=utf8_wordwrap($str,6," ");

echo $str;

////////////////////
//выведет hello< br/>

не подскажите как заставить эту функцию удилить потом или сразу такие "ляпы"?

-~{}~ 29.11.06 08:01:

добавил в конце регуляргу которая обратно слепит теги, но только если они это по краям

PHP:
function utf8_wordwrap($str, $width, $break,$cut = false){
     if(!$cut){
         $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.',}\b#U';
     } else {
         $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#';
     }
     if(function_exists('mb_strlen')){
         $str_len = mb_strlen($str,'UTF-8');
     } else {
         $str_len = preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty);
    }
    $while_what = ceil($str_len / $width);
     $i = 1;
    $return = '';
    while ($i < $while_what){
        preg_match($regexp, $str,$matches);
        $string = $matches[0];
        $return .= $string . $break;
        $str = substr($str,strlen($string));
        $i++;
     }
	$str=$return.$str;

	mb_regex_encoding(mb_detect_encoding($str));
	$pattern = array('<'.$break, $break.'>', $break.'/>');
	$replacement = array('<', '>', '/>');

   for ($i=0; $i<sizeof($pattern); $i++) {
       $str = mb_ereg_replace($pattern[$i], $replacement[$i], $str);
   }


return $str;
}

а есть возможность сразу запретить разрывать html теги?
Как исправить регуляргу не знаю :( Не спрашивал бы
 
Сверху