|
|
|
| Пишу систему дампа базы данных.Сначала получаю список таблиц 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 вот что получается: Город ТенР.
Как изменить функцию, которая указана выше, чтобы не возникало таких проблем с кодировкой? | |
|
|
|
|
|
|
|
для: AVS
(19.01.2008 в 21:49)
| | Надо и в заголовке указывать соответсвующую кодировку. | |
|
|
|
|
|
|
|
для: Unkind
(19.01.2008 в 21:58)
| | Данные из таблицы записываются в файл. | |
|
|
|
|
|
|
|
для: AVS
(19.01.2008 в 22:15)
| | тогда просто просматривайте файл редактором, позволяющим смотреть файлы в utf-8.
Файл у Вас сформирован правильно. Почти наверняка.
Можно в начало, конечно, Byte Order Mark записать.
Тогда файл возможно будет смотреть в блокноте.
Но тогда он перестанет быть дампом. | |
|
|
|
|
|
|
|
для: AVS
(19.01.2008 в 22:15)
| | Чем открываете? Такой редактор, как WordPad, например, без BOM не может определить UTF-8.
> Тогда файл возможно будет смотреть в блокноте.
Блокнот-то определяет без BOM... | |
|
|
|
|
|
|
|
для: Unkind
(19.01.2008 в 22:22)
| | WordPad'ом открываю. А каким редактором советуете просматривать такие файлы? Блокнотом неудобно, так как символы перевода строки он воспринимает некорректно. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Unkind
(19.01.2008 в 22:40)
| | Да, четыре угла ))) Просто весь день за ПХП. Голова уже не варит ))) Поставлю возврат каретки, чтобы нормальный перевод строки был. Спасибо Вам. | |
|
|
|
|
|
|
|
для: AVS
(19.01.2008 в 22:51)
| | Для того, чтобы MySQL возвращала данные в нужной кодировке, достаточно запроса mysql_query("SET character_set_results='{$array[0]}'") ???? | |
|
|
|