上传文件时无法设置正确的字符集

时间:2013-09-25 00:44:13

标签: apache2 php postgresql upload

请耐心等待并检查此问题。

我写了一些简单的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文件?还是数据库?

我不知道还能做什么...我错过了什么?请请咨询

3 个答案:

答案 0 :(得分:1)

这似乎是StackOverflow问题,与ServerFault无关。但是,你应该看一下这篇文章:

以UTF-8命名文件:

Can a PHP file name (or a dir in its full path) have UTF-8 characters?

以UTF-8编写文件:

How to write file in UTF-8 format?

答案 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命令来确认。

enter image description here

示例代码

$fullPath = $uploadFolderPath."\\".iconv("utf-8", "cp932", $fileName);
move_uploaded_file($this->request->data["file_name"]['tmp_name'], $fullPath);