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