php находит ближайший пробел после mb_substr () - PullRequest
0 голосов
/ 03 ноября 2011

Мне нужно обрезать строку примерно на 160 символов, но я хочу сделать обрезку через ближайший пробел.Задача усугубляется рабочим шрифтом UTF-8 (функция mb_).Мой код следующий:

<?php
function mb_strrev($str, $encoding='UTF-8'){

   return mb_convert_encoding( strrev( mb_convert_encoding($str, 'UTF-16BE', $encoding) ),

$encoding, 'UTF-16LE');
}

$in = mb_strpos(mb_strrev(trim(mb_substr($mysring, 0, 165))), ' ');

$new = mb_substr(mb_strrev(trim(mb_substr($mysring, 0, 165))), $in, 165);

mb_strrev($new);
?>

Кто-нибудь знает более элегантный способ?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Найдено это , может быть, оно более элегантно для вас.

1 голос
/ 03 ноября 2011

Я бы сделал что-то вроде этого:

<?php  
function approx_len($str,$len) {  
$x = explode(" ",$str);  
$y = count($x);  
$newlen = '';  
for ($i = 0; $i < $y; $i++) {  
$this_x = $x[$i]. ' ';  
if (strlen($newlen.$this_x) > $len) $i = $y;  
else $newlen = $newlen.$this_x;  
}  
return $newlen;  
}  
$x = approx_len("aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa",160);  
echo $x;  
echo '<br />';  
echo strlen($x);  
//returns 156
?>
...