Необходимый фокус с кодировками
Итак, все настроено для работы с UTF-8:
- в заголовке страницы есть <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8“>
- в базе данных указана кодировка по умолчанию utf-8
- apache настроен отдавать страницы в utf-8
Остается только одно: когда данные формы передаются в php и затем помещаются в базу данных, через phpmyadmin они выглядят как не понятно что. И все вроде бы хорошо, потому что если через тот же php вывести данные из БД, то они отображаются нормально. Но эта фигня в phpmyadmin режет глаза.
Решается оно вот как. После подключения к базе данных, вписываем следующие строчки:
mysql_query (“set character_set_client=’utf8’”);
mysql_query (“set character_set_results=’utf8’”);
mysql_query (“set collation_connection=’utf8_general_ci’”);
Ну или какая там кодировка, соответственно. Эти строчки настраивают соответствие кодировок клиента и сервера MySQL, и приводят этот бардак в порядок.
2 years ago
April 3, 2010
И еще последствия перехода на UTF-8
И конечно же, с мультибайтовыми строками обламываются стандартные функции для работы со строками. Облом заключается в том, что один символ они начинают считать за два. Исправляется, опять же, использованием расширения mb_string:
http://ru2.php.net/manual/en/ref.mbstring.php
Лично я просто заменил функции:
strlen = mb_strlen
substr =mb_substr
и все чудесным образом исцелилось.
2 years ago
March 3, 2010
Еще одно решение проблемы mail в php
Поступило еще одно решение проблемы с темой (subject) письма, отправляемого функцией mail в php (подробности здесь: http://itruns.ru/post/422397378/sendmail). За решение спасибо ereptoris:
$subject = '=?UTF-8?'; //Говорим, что у нас в теме текст в соответствующей кодировке
$subject .= 'B?'; //А текст зашифрован алгоритмом base64
$subject .= base64_encode($content) . '?='; // Кодируем текст и дописываем завершающее выражение
Нечто похожее описано на той же странице на php.net. Может быть кому-то так и удобнее, не спорю. Лично для меня, более простой и очевидный способ я описал в предыдущей заметке, тем более, mb_string в любом случае подключен и никакой его глючности я пока что не заметил.
2 years ago
March 3, 2010
Новые потрясающие выкрутасы с sendmail
В темпе вальса переводим все письма в UTF-8! И, само собой, ничто никогда не работает сразу так, как хочется =).
Если в header просто заменить кодировку на UTF-8:
Content-type: text/html; charset=utf-8
само тело письма преобразуется нормально. Однако тема (subject) продолжает подражать самым изысканным иероглифам. На сайте php.net нашлась вот такая строчка:
$subject= mb_encode_mimeheader($subject, “UTF-8”, “B”, “\n”);
Сработало. Почему-то, не с первого раза, но это я уже не в силах объяснить.
2 years ago
March 2, 2010
Кусочек кода
Сегодня уже в который раз столкнулся с такой проблемой: есть сайт, с которого нужно нагло содрать какую-то информацию. На этом сайте html-сущности закодированы не очень понятно чем и выглядят на подобии & (представление амперсанда). Вроде интуитивно понятно, что к чему. Вот только обычными функциями php это не возьмешь. Нашелся вот такой кусочек кода:
$str = preg_replace(‘~&#x([0-9a-f]+);~ei’, ‘chr(hexdec(“\1”))’, $str);
$str = preg_replace(‘~&#([0-9]+);~e’, ‘chr(“\1”)’, $str);
Он работает. Лежал на самом видном месте - в примерах к функции html_entity_decode.
Кстати, скорее всего пригодиться при работе со всякими языками вроде китайского.
RSS
Archive
Mobile