среда, 8 апреля 2009 г.

PHP substr + utf-8

Положим нам надо в списке показывать кусок сообщения длиной не более 100символов, если сообщение больше 100символов, в конце добавить троеточие.
В кодировке UTF простое обрезание строки substr($str, 0, 100), приводит к появлению нераспознанных символов. Нам помогут функции mb_
public function getSubContent()
{
$str = strip_tags($this->getContent());
return mb_substr($str, 0, 100, 'utf-8').
(mb_strlen($str, 'utf-8') > 100 ? '...' : '');
}

5 комментариев:

Венци Кунев комментирует...

yup, thanks for that

Анонимный комментирует...

Жалко, что регулярки с utf-8 до сих пор не работают..

Разработка вебсайтов комментирует...

preg кажется работает
главное модификатор /u поставить

Unknown комментирует...

иногда лучше использовать другую функцию, так как тот код не везде срабатывает

function myutf8_substr2($str,$from,$len){
# utf8 substr
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}

как здесь http://www.eco-money.ru/forum/topic?id=7

я сам постоянно сталкиваюсь с такой проблемкой, кода кодю под joomla

LG комментирует...

Thanks a lot, man!
Помогло решить мою проблему :)