Senaryo: (PHP) bir UTF-8 kodlanmış bir dize ($name
), uluslararası karakterleri destekleyen bir form gönderme var. (GET) formunu gönderdikten sonra, ben bir CSV dosyası indir oluşturma. Ben dosyanın adı o olmak istiyorum string + .csv
("$name.csv"
). Batılı bir karakter kümesi için ben yaparak sadece iyi yapabilirsiniz:
header("Content-Disposition: attachment; filename=\"$name\"");
Ancak diğer karakter setleri için, indir dosyanın adı garbage letters + .csv
(örneğin {[) (2]} gibi). Ben böyle bir şey yapmak için RFC 2231 takip çalışıyorum:
header("Content-Disposition: attachment; filename*=UTF-8''$name");
Ama ben bir kaç sorun var gibi görünüyor:
- Tarayıcı başlığının "filename" kısmını göz ardı etmek gibi görünüyor. Benim biçimi doğru mu?
Ben "
This%20is%20%2A%2A%2Afun%2A%2A%2A
" gibi onaltılık kodlanmış$name
sekizli, her karakteri kodlamak gerekir. Herkes Bunu düzgün bir işlevi var mı? Ben şu kodlu ama doğru olduğunu sanmıyorum:$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); }
Orada herkes bu deneyimi var mı ve bana doğru yolda ayarlayabilirsiniz?