我遇到了麻烦,因为一个我从未预料到的问题,所以请帮助我。(我对Stackoverflow非常陌生,所以如果我做错了什么,请容忍我)我正在开发一个非常简单的2文件应用程序,它要求用户在索引页面中选择一个文件,然后在表单提交中上传文件。当我试图上传一个文件名中有特殊字符的文件时,会出现问题。move_upload_file无法移动文件!
我在支持PHP5.2的MAC OSx服务器上托管了这些文件。如果我正在使用任何其他浏览器,然后是Internet 7、8或9(还没有在IE6上尝试),文件就会被完美地上传。
所以这个bug (move_upload_file无法移动文件)与组合有关: MAC OSx + IE 7,8,9 +文件名中的特殊字符。
为了进行测试,我在Linux服务器上上传了文件,然后一切都正常运行,甚至在IE7、8和9中也是如此:(
我甚至没有编写过一行javascript代码,所以这不是JS兼容性问题。
任何一个人都能说明一下这个组合到底有什么问题吗?
以下是表单(index.html):
<html>
<body>
<form method="post" action="uploadfile.php" enctype="multipart/form-data">
<input type="file" name="uploadedfile" />
<input type="submit" name="sbmt" value="Save" />
</form>
</body>
</html>以下是来自fileupload.php的代码:
$target_path = "/Volumes/Data/........" . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "file has been uploaded";
} else{
echo "failed to upload file";
}为了解决这个问题,我花了一整天的时间,如果有人能帮我解释一下为什么会这样,我会非常感激的。
提前谢谢!
发布于 2014-01-29 11:27:18
我终于找到了原因..。)这是因为IE8和IE9正以一种奇怪的方式将文件名中的特殊字符转换成一些替代方法。类似于字符正在被转换为“”(2个字符)
当PHP试图上传文件名时,MAC OSx不允许这样做。因此,move_upload_file未能将文件从tmp目录移到它应该到达的目录。
为了解决这个问题,我去掉了不必要的特殊字符,但最终得到了一个令人满意的解释:)
谢谢大家抽出时间。
发布于 2014-01-28 18:26:54
欢迎来到斯塔克溢流,多莉。
我假设您正在使用的webapge是UTF-8字符集,但是这些字符位于一个不同的字符集中,比如ISO-8859-1。您可以使用htmlentities函数将字符转换为HTML。This page may also help.
https://stackoverflow.com/questions/21413566
复制相似问题