Узелок по UTF-8: есть сайт в кодировке X, нужно перевести в UTF-8
Излогаю краткий список того, что нада переводить в UTF-8, чтоб сайт работал корректно.
Если сайт должен работать с UTF-8, то в базе все должно в UTF-8 сохранятся. Вполне логично. Делаем так для создания новой БД:
Для изменения существующей так:
Для таблиц так:
Windows
Линукс (Дебиан в часности):# aptitude install php-mbstring
Делаем следующее в php.ini, httpd.conf или .htaccess (Не забудьте доставить php_value для httpd.conf или .htaccess).
Наведу список функций, которыми нада пользоватся для правильной роботы вашего сценария:
Простая функция-заменитель с php.net. Для простых текстов должно хватить.
Все просто. Меняем любой на:
Вам прийдется пересмостеть все-все-все и ничего не забыть =)
Излогаю краткий список того, что нада переводить в UTF-8, чтоб сайт работал корректно.
- База MySQL в часности
- Инсталляция mbstring
- Конфигурация mbstring
- Дело с небезопасными мультибайтовыми функциями в PHP
- htmlentities() для мультибайтных строк
- Проверка content-type хэдэров
- Проверте бинарные файлы и строки
1. База MySQL в часности
Если сайт должен работать с UTF-8, то в базе все должно в UTF-8 сохранятся. Вполне логично. Делаем так для создания новой БД:
CREATE DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;
Для изменения существующей так:
ALTER DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;
Для таблиц так:
ALTER TABLE tbl_name
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
2. Инсталляция mbstring
Windows
Линукс (Дебиан в часности):# aptitude install php-mbstring
3. Конфигурация mbstring
Делаем следующее в php.ini, httpd.conf или .htaccess (Не забудьте доставить php_value для httpd.conf или .htaccess).
mbstring.language = Neutral ; Set default language to Neutral(UTF-8) (default)
mbstring.internal_encoding = UTF-8 ; Set default internal encoding to UTF-8
mbstring.encoding_translation = On ; HTTP input encoding translation is enabled
mbstring.http_input = auto ; Set HTTP input character set dectection to auto
mbstring.http_output = UTF-8 ; Set HTTP output encoding to UTF-8
mbstring.detect_order = auto ; Set default character encoding detection order to auto
mbstring.substitute_character = none ; Do not print invalid characters
default_charset = UTF-8 ; Default character set for auto content type header
4. Дело с небезопасными мультибайтовыми функциями в PHP
Наведу список функций, которыми нада пользоватся для правильной роботы вашего сценария:
mail() | mb_send_mail() |
strlen() | mb_strlen() |
strpos() | mb_strpos() |
strrpos() | mb_strrpos() |
substr() | mb_substr() |
strtolower() | mb_strtolower() |
strtoupper() | mb_strtoupper() |
substr_count() | mb_substr_count() |
ereg() | mb_ereg() |
eregi() | mb_eregi() |
ereg_replace() | mb_ereg_replace() |
eregi_replace() | mb_eregi_replace() |
split() | mb_split() |
5. htmlentities() для мультибайтных строк
Простая функция-заменитель с php.net. Для простых текстов должно хватить.
/**
* Multibyte equivalent for htmlentities() [lite version :)]
*
* @param string $str
* @param string $encoding
* @return string
**/
function mb_htmlentities($str, $encoding = 'utf-8') {
mb_regex_encoding($encoding);
$pattern = array('<', '>', '"', '\'');
$replacement = array('<', '>', '"', ''');
for ($i=0; $i<sizeof($pattern); $i++) {
$str = mb_ereg_replace($pattern[$i], $replacement[$i], $str);
}
return $str;
}
6. Проверка content-type хэдэров
Все просто. Меняем любой на:
header('Content-Type: text/html; charset=UTF-8');
7. Проверить бинарные файлы и строки
Вам прийдется пересмостеть все-все-все и ничего не забыть =)
Шпаргалка, никак не статья.