php запись в файл - через раз кракозябры

12
DriverCat
На сайте с 10.04.2008
Offline
116
1280

По теме может показаться, что меня сразу можно отправить в гугл, но ситуация не обыденная. Есть скрипт в utf-8 кодировке, который записывает текст в utf-8 кодировке в файл простыми методами:


$e = fopen($filePath,'w+');
fputs($e,$htmlTemplate);
fclose($e);

данные идут в цикле, то есть этот скрипт пишет за раз несколько файлов, один пишет нормально, а в другой может записать например так

// изображение

причем латиница пишется нормально, эти кракозябры - это инклуд из другого файла в utf-8 кодировке, причем файл такого вида в notepad++ определяется как ANSI, прияем он !!!!! нормально отображается в браузере в кодировке utf-8!!!!!!

совсем не пойму даже на что грешить! не найду никакой закономерности пока!

M
На сайте с 19.12.2012
Offline
0
#1

Ну так кодировку у файлов, куда пишите тоже поставьте UTF-8.

VHS-1980
На сайте с 21.05.2010
Offline
91
#2

А данные то в какой кодировке? iconv перекодируйте насильно перед записью и посмотрите результат

---------- Добавлено 20.12.2012 в 13:07 ----------

mcseo:
Ну так кодировку у файлов, куда пишите тоже поставьте UTF-8.

'w+' и еще 10 раз

DriverCat
На сайте с 10.04.2008
Offline
116
#3
VHS-1980:
А данные то в какой кодировке? iconv перекодируйте насильно перед записью и посмотрите результат

данные в utf-8, тут дело в том, что даже те куски, которые инклудятся из одного и того же файла в utf-8 один раз пишутся нормально, а другой плохо.

M
На сайте с 19.12.2012
Offline
0
#4

DriverCat, можно аттачем скрипт сюда?

VHS-1980
На сайте с 21.05.2010
Offline
91
#5

Я честно - не вижу ни файла с инклудом, ни цикла, ничего. Насильно перекодируйте данные функцией iconv, и посмотрите что будет. Если в новые файлы будет писаться нормально - проблема во входных данных. Если нет - то в чем-то другом. Но не в коде, а в настройках.

DriverCat
На сайте с 10.04.2008
Offline
116
#6
VHS-1980:
Я честно - не вижу ни файла с инклудом, ни цикла, ничего. Насильно перекодируйте данные функцией iconv, и посмотрите что будет. Если в новые файлы будет писаться нормально - проблема во входных данных. Если нет - то в чем-то другом. Но не в коде, а в настройках.

такой вот код:


while ($list = mysql_fetch_assoc($query)) { //print_r($list);
$htmlTemplate = file_get_contents(Doska::TEMPLATE);
$e = fopen($filePath,'w+');
fputs($e,$htmlTemplate);
fclose($e);
}

какие можно посмотреть настройки?

VHS-1980
На сайте с 21.05.2010
Offline
91
#7

Если файл 1 и в него идет запись в разных кодировках - разные кодировки имеют данные, записываемые скриптом.

цикле данные на http://www.php.su/functions/?mb-detect-encoding проверьте

DriverCat
На сайте с 10.04.2008
Offline
116
#8
VHS-1980:
Если файл 1 и в него идет запись в разных кодировках - разные кодировки имеют данные, записываемые скриптом.

цикле данные на http://www.php.su/functions/?mb-detect-encoding проверьте

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

VHS-1980
На сайте с 21.05.2010
Offline
91
#9

Я имел в виду настройки кодировок в htaccess, но врядли проблема в этом.

Какая кодировка в БД? SET NAMES принудительно сделайте перед запросом

я все же настоятельно рекомендую, чтобы в угадайку не играть, в цикле сделать print mb_detect_encoding($data);

DriverCat
На сайте с 10.04.2008
Offline
116
#10
VHS-1980:
Я имел в виду настройки кодировок в htaccess, но врядли проблема в этом.
Какая кодировка в БД? SET NAMES принудительно сделайте перед запросом

да сделано давно уже.utf-8 в базе. понять хотя бы из-за чего не каждый раз такое происходит...

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий