Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Снова кодировка при записи файла, Что бы не делал, файл получается ANSI. 
:(
    Опции темы
namata
Дата 20.1.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Генерирую kml файлы (google maps) из базы. Тоже самое что xml, только расширение другое. В базе все utf_generic_ci; php-скрипт находится в отдельном файле в кодировке UTF: он берет данные, собирает нужный текст просто в переменной $kml (не через dom) и обновляет файл:
Код

$w=fopen($file_name,'w'); 
fwrite($w,$kml);
fclose($w);


В итоге получается файл в ANSI (DOS). Google у меня понимает этот файл, только если я руками сделаю следующие манипуляции:
1) смена в текстовом редакторе (пробовал это все в PSPad и в блокноте - одно и тоже) кодировки файла на UTF-8;
2) сохранение под другим именем, т.е. обязательно надо создать новый файл - перезапись старого не срабатывает.

Пожалуйста, объясните это с научной точки зрения, а то звон бубна сплошной у меня в ушах. Научите записывать файл сразу в нужной кодировке или конвертировать созданный. iconv переменной с текстом, header('Content-Type: text/html; charset=UTF-8'); в начале php, добавление "b" к fopen не работает. Если файл руками переделать в utf, то после обновления он становится ansi. 
PM MAIL   Вверх
GeneralElectric
Дата 21.1.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



да уж. header('Content-Type в пхп-скрипте, который пишет в файл - это не бубен, это сводный оркестр шаманов п-ова Ямал.

из базы данные приходят в какой кодировке?
PM MAIL   Вверх
namata
Дата 21.1.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Да mysql_query("SET NAMES 'utf8'"); помогло перед запросом. Хотя я был уверен что это не нужно, так как в базе данные лежат в utf_general_ci. Не совсем понимаю почему так происходит. И почему в таком случае iconv не сработал...
PM MAIL   Вверх
GeneralElectric
Дата 21.1.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



SET NAMES не влияет на кодировку, в которой лежат данные в базе. он влияет на то, в какой они приходят.
а иконв работает только тогда, когда ему правильно указать кодировки.

но в любом случае, я, честно, удивлен, что вопрос был не как получить данные из базы в нужной кодировке.
я, когда еду в отпуск, проверяю, сколько взял с собой денег. 2-3 раза. а не рассуждаю "в пачке лежала тысяча". вот первым делом проверяю - что кладу к себе в карман. а не потом, в отпуске, предъявляю претензии карману.

Добавлено через 1 минуту и 33 секунды
"лежать" данные в utf_general_ci не могут. это правила сравнения при поиске. а кодировка - utf8. причем не самих данных, а поля, в котором они лежат. а сами данные могут быть в любой другой.
PM MAIL   Вверх
namata
Дата 21.1.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



А есть способ узнать в какой точно кодировке данные ну допустим в переменной php?
PM MAIL   Вверх
skyboy
Дата 21.1.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(namata @  21.1.2008,  12:14 Найти цитируемый пост)
А есть способ узнать в какой точно кодировке данные ну допустим в переменной php?

нет. кодировка - это только соглашение программиста с самим собой. 
точно так же, как система счисления: строка "1001100" может означать запись в любой возможной системе счисления - с основанием от минус бексконечности до бесконечности(исключая ноль).

Добавлено через 5 минут и 53 секунды
специализированные программы(например, Штирлиц или блокнот Bred2) определяют кодировку эмпирически: перебирают доступные кодировки, пока символы из файла в соответствие с текущей кодировкой все не станут алфавитно-цифровыми символами - никаких символов псевдографики и т.д.. а так - в текстовом потоке никакой информации о кодировках нет. И текстовые переменные подобной информации не хранят.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.