Проблема с кириллицей в php

Рейтинг: 2Ответов: 3Опубликовано: 22.10.2014

Проект разрабатывается в кодировке utf-8. Столкнулся с проблемой обработки строк с символами кириллицы. Код

<?
    header('Content-Type: text/html; charset=utf-8');

    $str =  "Дополнительное оборудование";

    echo substr($str, 0, 7);

    echo "<br>";

    $str =  "Dopolnitelnoe oborudovanie";

    echo substr($str, 0, 7);
?>

Выдает результат

Доп�
Dopolni

Т.е. для кириллицы функция не работает.

Что необходимо сделать, чтобы на выходе вместо "Доп�" получить "Дополни"?

Ответы

▲ 6Принят

Почитай http://php.net/manual/en/ref.mbstring.php

Если коротко, то для мультибайтовых кодировок используют mb_substr()

mb_substr($str, 0, 7, "UTF-8"); 
▲ 3

Если сайт разрабатывается, как вы пишите, в UTF-8, значит надо разрабатывать UTF-8. Чтобы все мультибайтовые функции работали по умолчанию с разрабатываемой кодировкой, ее надо задать в самом начале (и желательно проверить, задалась или нет):

const PAGE_ENCODING     ='UTF-8';

if(mb_internal_encoding(PAGE_ENCODING) != PAGE_ENCODING) 
throw new SomeException('There is no support encoding: '.PAGE_ENCODING);

Если все ок, можете юзать все mb_ без прописки кодировки.

Забыл написать, почему это важно, ну, если вы разрабатываете. Потому что при использовании имени функции в качестве callback прописывать кодировку будет некуда.

▲ 1

mb_substr() вместо substr()