Сценарий: (в PHP) У меня есть отправка формы с кодированной строкой UTF-8 ($name
) для поддержки международных символов. После отправки формы (через GET) я создаю файл загрузки CSV. Я хочу, чтобы имя файла было string + .csv
("$name.csv"
). Для западного набора символов я могу сделать это просто отлично, выполнив:
header("Content-Disposition: attachment; filename=\"$name\"");
Но для других наборов символов имя загружаемого файла: мусорные буквы + .csv
(например, ×œ×œ× ×›×•×ª×¨×ª.csv
). Я пытаюсь следовать RFC 2231, чтобы сделать что-то вроде:
header("Content-Disposition: attachment; filename*=UTF-8''$name");
Но у меня, похоже, есть пара проблем:
- Браузер игнорирует часть заголовка " filename ". Мой формат правильный?
Мне нужно закодировать каждый символ $name
октетов, закодированных в шестнадцатеричном формате, например "This%20is%20%2A%2A%2Afun%2A%2A%2A
". У кого-нибудь есть функция, чтобы сделать это правильно? Я кодировал следующее, но не думаю, что это правильно:
$fileName = encodeWordRfc2231($name) . ".csv";
header("Content-Disposition: attachment; filename*=UTF-8''$fileName");
function &encodeWordRfc2231($word) {
$binArray = unpack("C*", $word);
foreach ($binArray as $chr) {
$hex_ary[] = '%' . sprintf("%02X", base_convert($chr, 2, 16));
}
return implode('', $hex_ary);
}
Есть ли у кого-нибудь опыт с этим и может ли поставить меня на правильный путь?