Проблема с кодировками

Astral Man

We Will Rock You
Проблема с кодировками

Есть скрипт который разбирает файл в CP886 (DOS) кодировке и помещает данные в базу.
Перед тем как поместить данные в БД весь текст переводится в кодировку WINDOWS-1251, запускаю его через браузер все отлично работает... данные в нужной кодировке лежат в базе (MSSQL 2000, смотрю через Enterprise Manager). Если я этот скритп запускаю через php.exe, то данные переводить в WINODWS-1251 не нужно... он и как нормально ложатся, т.е. их можно прочитать...
Как это объяснить? И какой выход из положения? т.к. скрипт нужно запускать как из браузера так и с помощью php.exe

Надеюсь понятно объяснил. Спасибо!
 

Astral Man

We Will Rock You
Tor
К чему это?

Есть файл который нужно в БД положить, он в DOS кодировке... для скрипта который запускается через брузер его нужно перекодировать в WIN кодировку что бы данные в БД были читабельными, но если этот скрипт запустить через PHP.EXE перекодировать в WIN кодировку не нужно данные и так ложатся в читабельном виде.
Почему при запуске через php.exe не требуется перекодировка???
 

svetasmirnova

маленький монстрик
>И какой выход из положения? т.к. скрипт нужно запускать как из браузера так и с помощью php.exe
проверять откуда запущен скрипт и соответственно перекодировать или нет
 

Astral Man

We Will Rock You
svetasmirnova
Это можно, но все же хотелось узнать почему так проиходит. Может в php.ini есть какя нибуть настройка?
 

svetasmirnova

маленький монстрик
Причём здесь php.ini? cli выводит ответ на консоль: приложение, которое выводит данные чаще всего в той же кодировке, что и дефолтная в системе. А в браузер данные могут выводиться в кодировке cp1251 (в твоём случае) или ещё в какой-нибудь.
 

kvf77

Red Devil
Astral Man

я думаю, что у тебя всегда выводится все правильно - скорее всего ты в скрипте что-то делаешь неправильно
 

Astral Man

We Will Rock You
kvf77
Да все правильно, открыл файл получил из него данные, добавил в БД и все.
Скрипт ни каких данных не выводит в выходной поток, токлько добаляет данные в БД.
Только все равно я немогу врубиться... файл явно в DOS кодировке, почему его не нужно перекодировать если запустить скрипт через php.exe а через браузер нужно...

торможу...
 

kvf77

Red Devil
Astral Man

я не знаю что такое "явно в dos кодировке"
и не понимаю для чего ты перекодируешь его в браузер и ри каких обстоятельствах - ты явно путаешься сам и нас путаешь - сначала определи кодировку и приведи кусок скрипта, который выводит в браузер и кусок <head> части вывода в браузер, где написано в какой кодировке выводишь
 

svetasmirnova

маленький монстрик
файл явно в DOS кодировке, почему его не нужно перекодировать если запустить скрипт через php.exe а через браузер нужно...
потому что консоль отображает DOS кодировку корректно, а в браузер ты шлёшь заголовок cp1251, после чего он думает что данные в cp1251. Так их и отображает
 

Astral Man

We Will Rock You
svetasmirnova
Данные в браузере не отображаются... нет ни одного оператора echo...
ТОЛЬКО добавление данных в БД. Причем здесь заголовок? я вообще ничего в браузер не посылаю.
 

svetasmirnova

маленький монстрик
Выражайтесь понятнее;) Впрочем заголовок всё при том же. В общем случае серверное приложение получает данные из форм в той же кодировке, какая была послана браузеру в качестве заголовка. Для страницы с формой.
 

Astral Man

We Will Rock You
Вот похожий скрипт:
PHP:
$file = file('123.txt');
$db->open();
$sql = "INSERT INTO test
        (
            test
        )
        VALUES (
            '$file[0]'
        )";
$db->query($sql);
Если запустить из браузера, в базу поподает запись:
Код:
ќв® ў „Ћ‘ Є®¤Ёа®ўЄҐ
а если через php.exe
Код:
Это в ДОС кодировке
Если запустить этот скрипт из браузера
PHP:
$file = file('123.txt');

$str = iconv('CP866', 'WINDOWS-1251', $file['0']);

$db->open();
$sql = "INSERT INTO test
        (
            test
        )
        VALUES (
            '$str'
        )";
$db->query($sql);
добавляется "Это в ДОС кодировке"
 

kvf77

Red Devil
Astral Man

файлик ты каким образом получаешь в обоих случаях?
1) когда запускаешь из коммандной стороки
2) когда запускаешь из браузера
 

Astral Man

We Will Rock You
Да едрён батон...

Файл создает другая программа, он в ДОСОВСКОЙ кодировке.
Данные из него добавляем в БД, код уже привел...
То что добалено я смотрю через Enterprise Manager то что там вижу тоже написал ВЫШЕ.

Чего не понятного???
 

kvf77

Red Devil
Astral Man
у тебя бубен есть? побегай вокруг улюлюкая и ударяя в него - может заработает - а нам мозги не парь - ничего из ничего не получается, а если ошибку искать не хочешь - то кто виноват?
 

kvf77

Red Devil
Astral Man
тебе помоему ясно намекнул - ищи ошибку в формировании нужного тебе файла
 

SelenIT

IT-лунатик :)
Astral Man

Если обратиться к БД не через прослойку ($db->...), а напрямую (mssql_connect и т.п.) - результат тоже зависит от способа запуска скрипта?
 
Сверху