Pull to refresh

Шпаргалка по переходу на UTF-8

Reading time 2 min
Views 3.1K
Узелок по UTF-8: есть сайт в кодировке X, нужно перевести в UTF-8
Излогаю краткий список того, что нада переводить в UTF-8, чтоб сайт работал корректно.
  1. База MySQL в часности
  2. Инсталляция mbstring
  3. Конфигурация mbstring
  4. Дело с небезопасными мультибайтовыми функциями в PHP
  5. htmlentities() для мультибайтных строк
  6. Проверка content-type хэдэров
  7. Проверте бинарные файлы и строки




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. Проверить бинарные файлы и строки


Вам прийдется пересмостеть все-все-все и ничего не забыть =)

Шпаргалка, никак не статья.
Tags:
Hubs:
0
Comments 0
Comments Leave a comment

Articles