我有一个简单的HTML表单
<form id="uploadForm" method="post" action="/cgi-bin/test.cgi" enctype="multipart/form-data">
<input type="submit" name="add_something" value="add">
<input size="50" type="file" name="myFile" accept="application/zip">
</form>
此外,我通过检查用户浏览器区域设置或搜索自设语言会话cookie在服务器端进行一些网页本地化。
如果我使用
上传文件一切正常。但是如果我用
上传文件本地化失败。我在HTTP请求中检测到了问题:
Opera 11
Content-Disposition: form-data; name="myFile"; filename="ziptest.zip"
Content-Type: application/zip
和IE 9
Content-Disposition: form-data; name="myFile"; filename="C:\Documents and Settings\m1krsch\Documents\Now Some Spaces\ziptest.zip"
Content-Type: application/x-zip-compressed
如果我从路径中删除空格,那么在IE和Maxton中一切正常。
我可以交换使用过的cgicc库,因为它是项目的固定部分,也不能强迫用户使用没有空格的路径。我该如何规避这个问题?有没有办法强制IE / Maxton使用文件名而不是abolute文件路径?或者我可以在cgi / env中设置一个特定参数来阻止传输abolute文件路径吗?
[编辑] 我发现这是IE和Maxton中的安全问题。 IE的安全区域模型默认允许“在上载文件时包括本地目录路径”。我只能通过更改客户端配置来禁止此行为,但我仍在搜索基于应用程序的解决方案。 [/编辑]
答案 0 :(得分:0)
尝试用'%20'
替换空格:
"C:\Documents%20and%20Settings\m1krsch\Documents\Now%20Some%20Spaces\ziptest.zip"
答案 1 :(得分:0)
我在本地化代码中发现了一个愚蠢的错误。我正在使用RapidXML,并将整个本地化代码和RapidXML头文封装在一个类中。不幸的是我没有仔细阅读文档。 vector<char>
对象中的数据(包含XML文档数据)不会按预期使用xml_document<>
方法复制到XML文档对象parse()
中。这对我来说看起来像程序C代码,在我看来是糟糕的OOD。文档说:
3.1源文本的生命周期
原位解析要求源文本至少与文档对象一样长。
当我更正代码以在本地化类中获取全局vector<char>
对象时,问题就消失了。
尽管如此,我很困惑为什么大多数其他浏览器对我的旧代码都没有问题。