シナリオ: (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");
しかし、私はいくつかの問題を抱えているようです:
- ブラウザは、ヘッダーの「filename」部分を無視しているようです。私のフォーマットは正しいですか?
$name
" " のように、16 進数でエンコードされたオクテットの各文字をエンコードする必要があり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); }
誰かがこれを経験していて、私を正しい道に導くことができますか?