场景:(在PHP中)我有一个表单提交,其中包含UTF-8编码的字符串($name)以支持国际字符.在提交表单(通过GET)后,我正在创建一个CSV下载文件.我希望文件的名称是字符串 + .csv ("$name.csv").对于西方字符集,我可以通过以下方式做到这一点:
header("Content-Disposition: attachment; filename=\"$name\"");
Run Code Online (Sandbox Code Playgroud)
但对于其他字符集,下载文件的名称是垃圾字母 + .csv(例如×œ×œ× ×›×•×ª×¨×ª.csv).我试图遵循RFC 2231做类似的事情:
header("Content-Disposition: attachment; filename*=UTF-8''$name");
Run Code Online (Sandbox Code Playgroud)
但我似乎有几个问题:
我需要$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);
}
Run Code Online (Sandbox Code Playgroud)有没有人有这方面的经验,可以让我走上正确的道路?