请耐心等待并检查此问题。
我写了一些简单的PHP代码来上传图片。
这是代码(片段)
<?php
header('Content-Type: text/plain; charset=utf-8');
//set encoding for prepared statements
$dbh->exec("SET NAMES UTF8");
$dbh->query('SET NAMES UTF8');
//check if file is actually an image etc.
//send image to "upload" folder
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
//save to the database a string like "upload/myImage.jpg", so I can render it on the site later
$stu = $dbh->prepare("UPDATE multi SET m_place=:name WHERE m_id = :id");
$stu->bindParam(':name', $n, PDO::PARAM_STR);
$n= "upload/".$_FILES["file"]["name"];
$stu->execute();
如果图片名称是英文,一切都很好。如果是希腊语,它在数据库中保存好,但不在文件夹中保存。在数据库中,我看到χωρις τιτλο.jpg
(右侧)和文件夹χωΟΞ―Ο‚ τίτλο.jpg
中的错误。
我已经尝试了一切,无法解决这个问题。要在文件夹中获得正确的标题。
数据库(postgreSQL 9.1)的编码是UTF8,排序规则和字符类型是Greek_Greece.1235
。我保存图像标题的表格列中的合并是pg_catalog."C"
。
我使用DreamWeaver。处理上传的文件是一个php文件。编码为utf8,Unicode规范化表格为C,未选中包含Unicode签名(BOM)。
控制面板中的区域和语言中的默认语言为希腊语。 (Windows 7家庭高级版)
浏览器的编码是utf8
我也使用Apache 2.2.22。这是Apache的错吗?还是它的php文件?还是数据库?
我不知道还能做什么...我错过了什么?请请咨询
答案 0 :(得分:1)
这似乎是StackOverflow问题,与ServerFault无关。但是,你应该看一下这篇文章:
以UTF-8命名文件:
Can a PHP file name (or a dir in its full path) have UTF-8 characters?
以UTF-8编写文件:
答案 1 :(得分:1)
原来,我没有尝试过一切。
感谢this我找到了解决方案。
它与PHP有关,“PHP文件系统函数只能处理系统代码页中的字符”
所以我使用了iconv
函数。
我改变了代码
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv('UTF-8', 'Windows-1253',$_FILES["file"]["name"]));
答案 2 :(得分:0)
对于使用japanese的应用程序,代码页是cp932
这可以通过在命令行中使用chcp
命令来确认。
示例代码
$fullPath = $uploadFolderPath."\\".iconv("utf-8", "cp932", $fileName);
move_uploaded_file($this->request->data["file_name"]['tmp_name'], $fullPath);