Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическая смена кодировки
 
 автор: AVS   (19.01.2008 в 21:49)   письмо автору
 
 

Пишу систему дампа базы данных.Сначала получаю список таблиц SHOW TABLE STATUS. Получаю сравнение для каждой таблицы. Передаю это сравнение на функцию, написанную ниже, которая извлекает префикс сравнения - он обозначает кодировку таблицы. Следующий шаг - начинаю извлекать данные из таблицы. Но тут возникла проблема кодировок. Написал функцию:


function charset($collation)
{
    preg_match("|^[0-9a-z]+|i",$collation,$array);
    mysql_query("SET character_set_client='{$array[0]}'");
    mysql_query("SET character_set_results='{$array[0]}'");
    mysql_query("SET collation_connection='{$collation}'");
}


Вот таким способом я меняю кодировку для каждой таблицы. Для cp1251 все работает хорошо. Но при utf8 вот что получается: Город ТенР.

Как изменить функцию, которая указана выше, чтобы не возникало таких проблем с кодировкой?

   
 
 автор: Unkind   (19.01.2008 в 21:58)   письмо автору
 
   для: AVS   (19.01.2008 в 21:49)
 

Надо и в заголовке указывать соответсвующую кодировку.

   
 
 автор: AVS   (19.01.2008 в 22:15)   письмо автору
 
   для: Unkind   (19.01.2008 в 21:58)
 

Данные из таблицы записываются в файл.

   
 
 автор: Trianon   (19.01.2008 в 22:18)   письмо автору
 
   для: AVS   (19.01.2008 в 22:15)
 

тогда просто просматривайте файл редактором, позволяющим смотреть файлы в utf-8.

Файл у Вас сформирован правильно. Почти наверняка.

Можно в начало, конечно, Byte Order Mark записать.
Тогда файл возможно будет смотреть в блокноте.
Но тогда он перестанет быть дампом.

   
 
 автор: Unkind   (19.01.2008 в 22:22)   письмо автору
 
   для: AVS   (19.01.2008 в 22:15)
 

Чем открываете? Такой редактор, как WordPad, например, без BOM не может определить UTF-8.

> Тогда файл возможно будет смотреть в блокноте.
Блокнот-то определяет без BOM...

   
 
 автор: AVS   (19.01.2008 в 22:31)   письмо автору
 
   для: Unkind   (19.01.2008 в 22:22)
 

WordPad'ом открываю. А каким редактором советуете просматривать такие файлы? Блокнотом неудобно, так как символы перевода строки он воспринимает некорректно.

   
 
 автор: Unkind   (19.01.2008 в 22:40)   письмо автору
 
   для: AVS   (19.01.2008 в 22:31)
 

Всё зависит от того, что дальше будет с файлом. Если просто для чтения в редакторе (и вообще работы в редакторе), то можно записывать данные в файл с Byte Order Mark:

<?php
// ...

$text 'Текст в UTF-8';

$fh fopen('file.txt''wb');
fwrite($fh"\xEF\xBB\xBF" $text);
fclose($fh);
?>


> как символы перевода строки он воспринимает как обычные символы в виде треугольников
Надо символы переводы строки записывать как "\r\n", а не "\n". Кстати, там фигура из четрых углов.

> А каким редактором советуете просматривать такие файлы?
Каждый нормальный редактор работает с UTF-8.

   
 
 автор: AVS   (19.01.2008 в 22:51)   письмо автору
 
   для: Unkind   (19.01.2008 в 22:40)
 

Да, четыре угла ))) Просто весь день за ПХП. Голова уже не варит ))) Поставлю возврат каретки, чтобы нормальный перевод строки был. Спасибо Вам.

   
 
 автор: AVS   (19.01.2008 в 23:05)   письмо автору
 
   для: AVS   (19.01.2008 в 22:51)
 

Для того, чтобы MySQL возвращала данные в нужной кодировке, достаточно запроса mysql_query("SET character_set_results='{$array[0]}'") ????

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования