PHP Tricks. Порылся в загашнике

Решил порыться в том, с чем сталкивался пол-года назад. Вот например: берем из базы MySQL строку, и обрезаем ее до фиксированного кол-ва сиволов n. Все происходит в кодировке UTF-8. После урезки строки в конце появляется непонятный символ. Как убрать?

Итак, кириллица в UTF8 — достаточно двухбайтная :). И substr, в частности, обрезает симолвы непонятным нам образом (на самом деле, понятным, но не до конца).

Пол года назад я принял ламерское решение — укорчаивать строки в кодировке CP1251 и потом возвращаться в UTF8 готовую строку, если требуется. То есть что-то вроде:

echo iconvWINDOWS-1251«, «UTF-8«, substr(iconvUTF-8«, «WINDOWS-1251«, $string, 0, 40));

Думаю, разъяснять, что и как, не стоит. На такое мой мозг был способен пол года назад. Когда у меня перестанут появляться абсолютно идиотские решения (фактически, костыли)… я не знаю. 🙂

Реклама

  1. Engraver

    Еще можно юзать функции с префиксом mb_ для работы с произвольной кодировкой, тута mb_substr =)

  2. Я ничего не понял, что тут написано, но наверное что-то важное 🙂

  3. 2Engraver: спасибо, опробую. Хотя я кроме utf больше ничего универсального не люблю. Считаю, что для каждой задачи должен быть свой отдельный инструментарий для ее решения.

  4. Engraver

    Да, универсальность часто вредит. Тогда же, когда я на днях впервые столкнулся с этими «mb_» фунциями, то долго бился головой об стенку, пока не заметил, что в бд mysql с кодировкой utf-8 & utf_general_ci у строк в таблицах сравнение почему-то оказалось latin. Как то ни разу не обратил внимание, что его еще и там исправлять надо, а казалось бы, зачем его туда было разрабам пихать…

  5. Полезная штука — я сразу не догадался!
    У меня обрезание строки приводило к невалидности XHTML кода…

    Спасибо!

  6. Кстати, по поводу рекламы — что, прямо вот так можно предложить баннер 160 x 300?

  7. 2Engraver: swedish_latin1 (что-то вроде этого) кодировка устанавливается в mysqld по-умолчанию (странно, что в не зависимости от локали системы). Помогает, в частности, изменение конфигов в /etc/mysql.

    2ioni: да. а еще осторожно с utf8-файлами. Если xhtml-vaildator ругается на непонятные BOM-символы, убери их самые из файла (преобразуй файл в utf8 без bom — фактически, тоже самое, что и cp1251, но по два байта на символ и без идент-символов).
    Дада. Читаем.

  8. Спасибо, долго я мучался как убрать этот галимый символ, всю красоту портил мне)) спасибо!

  1. 1 PHP Tricks. Обрезание мультибайтовой строки « Реинкарнатор²

    […] Сегодня, идя домой, я пришел к выводу, что использовать костыли в виде iconv при работе с многобайтовыми кодировками — бред. Ведь […]




Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s



%d такие блоггеры, как: