01:21 Проблеми з кодуванням в PHP і MySQL і шляхи їх вирішення |
Доброго дня, точніше доброї ночі. Сьогодні
середа, отже візьму за звичку в цей день ділитися з Вами чимось корисним,
додавати новий матріал в блог. Недавно, кілька днів назад, мій знайомий
попросив мене допомогти йому вирішити проблеми з кодуванням, які виникають при
доступі до MySQL з PHP, записі/читанні баз даних. Свого часу, я вдосталь з цим намучився,
але рішення виявилось доволі простим. В Інтернеті на багатьох форумах задаються
одні й ті ж самі питання, і відповіді на ці питання теж доволі однакові. Отож я
б хотів виділити усе це в одне правило. Це звичайно не є панацеєю, оскільки для
різних типів задач, поставлених перед вами може бути кілька варіантів
вирішення, право ваше, але я притримуюсь таких принципів: • Вказуємо кодування в самому php/html
–файлі. Для цього вставляємо стрічку між <head></head> <meta http-equiv="Content-Type"
content="text/html; charset=utf-8"> • Створюємо файл .htaccess в головному
каталозі на сайті, де містяться ваші файли, і вказуємо в ньому кодування
вставляючи туди наступну стрічку: AddDefaultCharset utf-8 .html (обслуговування всіх файлів html з
роширеням utf-8) або просто AddDefaultCharset utf-8 (і потім через крапку додаємо потрібні розшерення) • В php для цього є такий варіант (функція
повинна поміщатись до виводу контенту, тобто в початок скрипту) <?php <br>
header("Content-Type: text/html; charset=UTF-8"); <br>
?> • При створенні таблиць, і баз даних в MySQL теж відповідно вказуємо одну з наступних кодувань на ваш розсуд (в принципі одне і те ж, бо utf8 і є utf8_general_ci) наприклад так mysql_query("CREATE TABLE IF NOT EXISTS
`table_name` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(225) NOT NULL, `message` varchar(225) NOT NULL, `date` text, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8); CREATE DATABASE `my_db` CHARACTER SET utf8 COLLATE
utf8_general_ci; Для зміни кодування існуючої таблиці або бази потрібно скористатись
відповідно командами: ALTER TABLE table1 DEFAULT CHARACTER SET
cp1251_general_ci • Після підключення і вибору потрібної бази, в php-скрипті прописуємо стрічку(встановлення в MySQL кодування для імен) mysql_query("set names utf8"); • Локалізація в MySQL. перед виконанням SQL-інструкцій необхідно налаштувати кодування з'єднання за допомогою операторів: SET character_set_client='utf8'; SET character_set_results='utf8'; SET character_set_connection='utf8'; Ці три SQL оператори еквівалентні одному SET NAMES 'cp1251'; Змінна character_set_client встановлює
кодування даних, що відправляються від клієнта, змінна character_set_results
встановлює кодування даних, що відправляються клієнту, змінна
character_set_connection встановлює кодування, в яку перетвориться
інформація, що прийшла від клієнта, перед виконанням запиту на сервері. • Або ж встановити кодування клієнта <?php <br> $link = mysql_connect('localhost','user1','pass1',TRUE); <br>
mysql_selectdb('db1',$link); <br>
mysql_set_charset('utf8',$link); <br> ?> Ось здається і все. Звичайно це не є
панацеєю, адже бувають різні випадки, але в усякому разі воно допоможе вам
уникнути багатьох проблем в подальшому. Отже читайте, розбирайтесь, вирішуйте
проблеми. Був радий допомогти.(коли дописав уже став
четверг) |
|
Всього коментарів: 0 | |