PHP: RFC-2231 Cómo codificar la cadena UTF-8 como nombre de archivo de disposición de contenido

Escenario: (en PHP) Tengo un envío de formulario con unUTF-8 cadena codificada ($name) para admitir caracteres internacionales. Al enviar el formulario (a través de GET), estoy creando un archivo de descarga CSV. Quiero que el nombre del archivo sea esecuerda + .csv ("$name.csv") Para un conjunto de caracteres occidental, puedo hacer esto bien haciendo:

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

Pero para otros conjuntos de caracteres, el nombre del archivo de descarga escartas de basura + .csv (como×œ×œ× ×›×•×ª×¨×ª.csv) Estoy tratando de seguir RFC 2231 para hacer algo como:

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

Pero parece que tengo un par de problemas:

El navegador parece ignorar el "nombre del archivo"parte del encabezado. ¿Es correcto mi formato?

Necesito codificar cada personaje de$name octetos codificados en hexadecimal, como "This%20is%20%2A%2A%2Afun%2A%2A%2A". ¿Alguien tiene una función para hacer esto correctamente? Codifiqué lo siguiente pero no creo que sea correcto:

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

¿Alguien por ahí tiene experiencia con esto y me puede poner en el camino correcto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta