При обрезке строки ( substr ) вылезают знаки вопроса
- 14 Сентября 2013
- Volodymyr Hodiak
- Разработка
- 4803
Часто при разработке проекта возникает необходимость в обрезании сроки. Если использовать кодировку WINDOWS — проблем нет, а вот если мы перешли на UTF-8! Об этом мы сегодня и поговорим.
Очень часто я вижу сайты в которых в некоторых блоках стоят знаки вопроса ?. Только не путайте ? с ? - это совсем разные вещи. При использовании UTF-8 substr нам не подходит. Она будет оставлять щнаки вопрос. Нужно использовать аналог для UTF-8 mb_substr().
Решение проблемы на реальном примере. Задачи: сформировать адреса отделений с возможностью сортировки по буквам. Сайт двуязычный. Разумеется никто этого вручную делать не будет! Напишем парсер, заполним шаблон и внесем на сайт. Пример берем адреса отделений новой почты 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;
Результат можете просмотреть здесь