При обрізанні рядка (substr) вилазять знаки питання
- 14 Вересня 2013
- Volodymyr Hodiak
- Розробка
- 4536
Часто при розробці проекту виникає потреба в обрізанні строки. Якщо використовувати кодування WINDOWS — проблем нема, а от якщо ми перейшли на UTF-8! Про це ми сьогодні і поговоримо.
Дуже часто я бачу сайти в яких в деяких блоках стоять знаки питання ?. Тільки не плутайте ? з ? — це зовсім різні речі. При використанні UTF-8 substr нам не підходить. Вона залишатиме щнаки питання. Потрібно використати аналог для UTF-8 mb_substr().
Рішення проблеми на реальному прикладі. Завдання: сформувати адреси відділень з можливістю сортування в по літерах. Сайт двомовний. Зрозуміло ніхто цього вручну робити не буде! Напишем парсер, заповнимо шаблон і внесемо на сайт. За приклад беремо адреси відділень нової пошти http://novaposhta.ua/frontend/brunchoffices. Над ним будемо і працювати. Логіка рішення: формуємо таблицю міст на відділень. В tr додаємо атрибут rel із значенням літери.
Шаблон:
Авдіївка (Донецька область) відділ продажів (067)674-29-31
Код парсера на php
error_reporting(E_ALL); ini_set('max_execution_time',3600); $data='http://novaposhta.ua/frontend/brunchoffices/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;
Результат можете переглянути тут