PHP: RFC-2231 Como codificar UTF-8 String como nome de arquivo Disposição de Conteúdo

Cenário: (em PHP) Eu tenho um envio de formulário com umUTF-8 sequência codificada ($name) para suportar caracteres internacionais. Ao enviar o formulário (via GET), estou criando um arquivo de download CSV. Eu quero que o nome do arquivo seja aquelecorda + .csv ("$name.csv") Para um conjunto de caracteres ocidentais, posso fazer isso muito bem, fazendo:

header("Content-Disposition: attachment; filename=\"$name\"");

Mas para outros conjuntos de caracteres, o nome do arquivo de download écartas de lixo + .csv (tal como×œ×œ× ×›×•×ª×¨×ª.csv) Estou tentando seguir a RFC 2231 para fazer algo como:

header("Content-Disposition: attachment; filename*=UTF-8''$name");

Mas parece que tenho alguns problemas:

O navegador parece ignorar o "nome do arquivo"parte do cabeçalho. Meu formato está correto?

Eu preciso codificar cada caractere de$name octetos codificados em hexadecimal, como "This%20is%20%2A%2A%2Afun%2A%2A%2A". Alguém tem uma função para fazer isso corretamente? Eu codifiquei o seguinte, mas não acho que esteja certo:

$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);
}

Alguém aí tem experiência com isso e pode me colocar no caminho certo?

questionAnswers(1)

yourAnswerToTheQuestion