Головна » 2012 » Серпень » 23 » Проблеми з кодуванням в PHP і MySQL і шляхи їх вирішення
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&nbsp;<br> header("Content-Type:&nbsp;text/html;&nbsp;charset=UTF-8");&nbsp;<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
ALTER DATABASE database1 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&nbsp;<br> $link&nbsp;=&nbsp;mysql_connect('localhost','user1','pass1',TRUE);&nbsp;<br> mysql_selectdb('db1',$link);&nbsp;<br> mysql_set_charset('utf8',$link);&nbsp;<br> ?>

Ось здається і все. Звичайно це не є панацеєю, адже бувають різні випадки, але в усякому разі воно допоможе вам уникнути багатьох проблем в подальшому. Отже читайте, розбирайтесь, вирішуйте проблеми.

Був радий допомогти.(коли дописав уже став четверг)

Переглядів: 1071 | Додав: itportalkmua | Рейтинг: 5.0/1
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]