使用php保存文件时设置charset

时间:2013-09-22 17:34:40

标签: php character-encoding

我使用PHP创建了一个简单的代码,用于将图片上传到文件夹。

在服务器端我有

    <?php

 header('Content-Type: text/plain; charset=utf-8');

//check if file is actually an image etc.

//if is an image, send it 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();

问题?

如果图像的名称在文件夹中是英文,我看到“myImage01.jpg”,在数据库中也是“upload / myImage01.jpg”。但是,如果图像的名称在文件夹中的希腊文中,我会看到“Ο‡ΟΟΞ-Ο,Ο”Ξ-ϓλο.jpg”并在数据库中“上传/χωΠΟ,Ο“Ξ-ϔλο.jpg“。哪个错了。绝对的Ο‡ΟΞ-Ο,Ο“Ξ-ϔο»ΞΏ我应该得到“χωριςτιτλο”(那是希腊语中的“无标题”顺便说一句)。那么,我猜是charset问题?

我该如何解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:2)

听起来您的数据库没有正确的排序规则。确保表/列使用utf8_general_ci进行整理。

处理UTF8时非常重要的是对GET个请求使用以下两个MySQL行...

SET time_zone = '+00:00'
SET CHARACTER SET 'utf8'

...当您收到POST请求时,请使用以下两个...

SET time_zone = '+00:00'
SET NAMES 'utf8'

这些将有助于确保正确维护UTF8字符。

答案 1 :(得分:0)

最后,我发现“PHP文件系统函数只能处理系统代码页中的字符”。感谢this我解决了我的问题。

我使用了iconv函数

所以我改变了move_uploaded_file这样的行

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv('UTF-8', 'Windows1253',$_FILES["file"]["name"]));