При обрезке строки ( substr ) вылезают знаки вопроса
- 14 Сентября 2013
- Volodymyr Hodiak
- Разработка
- 4612
Часто при разработке проекта возникает необходимость в обрезании сроки. Если использовать кодировку 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;
Результат можете просмотреть здесь