PDA

Просмотр полной версии : вопрос по кодировке при передаче файла


MstDoc
04.04.2007, 05:24
Для передачи файла с сервака я использовал вот такие заголовки:

header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($url)) );
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");

Переменная $name берется из базы данных. Когда в ней есть только цифры и латинские буквы все работает норм. Когда есть русские буквы, файл скачивается, но при этом в качестве имени идет беспорядочный набор символов или только та часть имени, которая написана латинскими буквами.

При этом русский текст на страницу из базы передается нормально. Т.е. на странице отображается правильно.

Сайт расположен на 5gbfree.com. Когда проверяю у себя на компе в денвере, то все норм пашет.

Подскажите пожалуйста, как это исправить, или где почитать на тему.

je0n
04.04.2007, 08:30
может я сейчас тупану... Но попробуй так
header("Content-Type: application/octet-stream; charset=UTF-8;");

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


ну а еще можешь попреобразовывать кодировку в переменной $name. Функция convert_cyr_string() (http://php.ru/manual/function.convert-cyr-string.html)

blaga
04.04.2007, 08:38
http://forums.webscript.ru/showthread.php?postid=148642
http://www.flasher.ru/forum/showthread.php?t=72253
Вот что выдал мне гугл. Я бы просто сделал перекодировку в английиские буквы.

MstDoc
05.04.2007, 01:02
Пока ничего не помогло.

Прикол в том, что когда переменную $name выводится просто как текст на страницу, то все норм- русские буквы отображаются правильно. А когда сервер передает клиенту файл, где в качестве имени стоит эта же переменная, то тут уже проблемы с русскими буквами...

Перекодировка, конечно вариант, но все-таки хотелось бы нормальные русские имена...

bxN5
05.04.2007, 01:12
header("Content-Disposition: attachment; filename="'.$name.'"); Не?Зач строкой передавать?
з/ы минусы не ставить я не гуру
pp/s новый цвет режит глаза

MstDoc
05.04.2007, 02:58
Вот что примечательно:
если просто кинуть на сервак файл с русскими буквами в названии и дать на него прямую ссылку, то все отображается и скачивается норм....

MstDoc
06.04.2007, 04:52
Неужели никто не сталкивался? В инете ни одного решения нету...

_Nikolas_
06.04.2007, 14:53
просто может на серваке кодировка по умолчанию другая, перекодируй имя файла в нее и все должно работать.

MstDoc
06.04.2007, 19:42
пробовал вот так, все равно не помогло...


function toUnicodeEntities($text, $from="w") {
$text = convert_cyr_string($text, $from, "i");
$uni = "";
for ($i=0, $len=strlen($text); $i<$len; $i++) {
$char = $text{$i};
$code = ord($char);
$uni .= ($code>175)? "&#" . (1040+($code-176)) . ";" : $char;
}
return $uni;
}

_Nikolas_
06.04.2007, 20:53
Нет, ну не так конечно. Какая у тебя кодировка в пхп файлах и какая на серваке по умолчанию?

MstDoc
06.04.2007, 21:57
на серваке по умолчанию стоит utf-8, на странице я выставил cp1251, в базе тоже 1251,
в header пробовал добавлять 1251 не помогло...