При обрезке строки ( substr ) вылезают знаки вопроса

Люба х...ня

Часто при разработке проекта возникает необходимость в обрезании сроки. Если использовать кодировку WINDOWS  проблем нет, а вот если мы перешли на UTF-8! Об этом мы сегодня и поговорим.

Очень часто я вижу сайты в которых в некоторых блоках стоят знаки вопроса ?. Только не путайте ? с ? - это совсем разные вещи. При использовании UTF-8 substr нам не подходит. Она будет оставлять щнаки вопрос. Нужно использовать аналог для UTF-8 mb_substr().

string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

Решение проблемы на реальном примере. Задачи: сформировать адреса отделений с возможностью сортировки по буквам. Сайт двуязычный. Разумеется никто этого вручную делать не будет! Напишем парсер, заполним шаблон и внесем на сайт. Пример берем адреса отделений новой почты http://novaposhta.ua/frontend/brunchoffices? lang = ru. Над ним и будем работать. Логика решения: формируем таблицу городов на отделений. В tr добавляем атрибут rel со значением буквы.

Шаблон:

 Авдеевка (Донецкая область)


   отдел продаж
    (067)674-29-31

Код парсера на php

error_reporting(E_ALL);
ini_set('max_execution_time',3600);

$data='http://novaposhta.ua/frontend/brunchoffices? lang = ru/ru?alpha=all';
$data = urlencode(trim($data);

$doc = new DOMDocument();
@$doc->loadHTMLFile($data);
$out=";
foreach($doc->getElementsByTagName('td') as $items) {
    if($items->getAttribute('class') == 't-stdTblHeader') {
        $v = trim($items->nodeValue);
        $out .= '
        '. $v .'
            
                отдел продаж
                (067)674-29-31
            
        ';
    }
}
echo $out;

string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

Результат можете просмотреть здесь

Расскажите нам о своем проекте!