内容中的特殊字符
这个线程是如何在HTTP中编码Content-Disposition头文件名参数的重复内容? 但由于这个问题很久以前就被问过了,但仍然没有令人满意的答案(在我看来),我想再问一次。
我开发了一个C ++ CGI应用程序,它提供了可以在名称中包含特殊字符的文件
“怪异#€= {}; filename.txt”
似乎没有可能将HTTP Content-Dispostion设置为适用于所有浏览器的方式
我会很高兴为每个浏览器提供不同的解决方案。
现在,我来了多远:
Internet Explorer(添加双引号并替换#和;)
Content-Disposition: attachment; filename="weird %23 € = { } %3B filename.txt"
火狐浏览器(双引号似乎工作,没有更多的事情要做):
Content-Disposition: attachment; filename="weird # € = { } ; filename.txt"
另一种工作方式:
Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%e2%82%ac%20%3D%20%7B%20%7D%20%3B%20filename.txt
铬
当仅使用双引号时,会出现以下问题:
但是这工作:
Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%e2%82%ac%20%3D%20%7B%20%7D%20%3B%20filename.txt
歌剧
使用duoble引号或使用语法:filename * = UTF-8''...会产生以下问题:
编辑2:这是因为文件名长度限制。 该语法适用于Opera:
Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%e2%82%ac%20%3D%20%7B%20%7D%20%3B%20filename.txt
苹果浏览器
€将被替换为一个不可见的字符(使用双引号)
no solution that prevents that little problem
来自其他线程(上面提到的)使用的建议
Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%80%20%3D%20%7B%20%7D%20%3B%20filename.txt
没有为我工作。 转义字符不会被翻译回去,或者浏览器想用我的cgi应用程序的名称保存到文件中。 那是因为我的编码错了。 我没有按照RFC 5987进行编码,但Safari仍然没有使用这种编码。 所以迄今为止还没有解决欧元的问题。
顺便说一句:一个UTF-8转换器http://www.rishida.net/tools/conversion/
我使用这些测试的每个浏览器的最新版本:
PS:我在我的键盘上尝试了所有特殊字符。 我在这个线程中只使用那些制造麻烦的线程。
编辑:
我也尝试过在我的键盘上使用所有特殊字符的文件名(这可能在文件名中),并且不像上面的测试字符串那样工作:
完成测试字符串:
0 ! § $ % & ( ) = ` ´ { } [ ] ² ³ @ € µ ^ ° ~ + ' # - _ . , ; ü ä ö ß 9.jpg
编码测试字符串:
0%20%21%20%C2%A7%20%24%20%25%20%26%20%28%20%29%20%3D%20%60%20%C2%B4%20%7B%20%7D%20%20%20%20%5B%20%5D%20%C2%B2%20%C2%B3%20%40%20%E2%82%AC%20%C2%B5%20%5E%20%C2%B0%20~%20%2B%20%27%20%23%20-%20_%20.%20%2C%20%3B%20%C3%BC%20%C3%A4%20%C3%B6%20%C3%9F%209.jpg
使用这种方法:
Content-Disposition: attachment; filename*=UTF-8''0%20%21%20%C2%A7%20%24%20%25%20%26%20%28%20%29%20%3D%20%60%20%C2%B4%20%7B%20%7D%20%20%20%20%5B%20%5D%20%C2%B2%20%C2%B3%20%40%20%E2%82%AC%20%C2%B5%20%5E%20%C2%B0%20~%20%2B%20%27%20%23%20-%20_%20.%20%2C%20%3B%20%C3%BC%20%C3%A4%20%C3%B6%20%C3%9F%209.jpg
我有以下结果:
编辑2:
目前状态是,语法文件名* = UTF-8'filname转义序列“适用于除Safari之外的所有浏览器,唯一被Safari取代的字符是€。我想我可以忍受这一点。您!
编辑3:文件名的长度
我注意到一些文件名长度问题。
Firefox,MSIE(从版本9开始),Opera,Konq和Chrome支持; MSIE8和Safari不支持; 其他支持是未知的 - RFC 5987中定义的编码。
请注意,在
Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%80%20%3D%20%7B%20%7D%20%3B%20filename.txt
你得到了欧元字符的编码错误; 它的unicode代码点不是%80,修复这应该使它在除了Safari(正确的编码是%e2%82%ac)以外的任何地方工作。
测试案例:
http://greenbytes.de/tech/tc2231/#attwithfn2231utf8
链接地址: http://www.djcxy.com/p/22161.html上一篇: Special Characters in Content
下一篇: The underlying connection was closed: An unexpected error occurred