2

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

我写了一些简单的 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。是阿帕奇的错吗?还是它的php文件?还是数据库?

我不知道还能做什么......我错过了什么?求求求指教

4

3 回答 3

1

事实证明,我没有尝试一切。

多亏了这个,我找到了解决方案。

它与 PHP 以及“PHP 文件系统函数如何只能处理系统代码页中的字符”有关

所以我使用了这个iconv功能。

我像这样更改了代码

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv('UTF-8', 'Windows-1253',$_FILES["file"]["name"]));
于 2013-09-26T18:32:08.537 回答
1

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

以 UTF-8 命名文件:

PHP 文件名(或其完整路径中的目录)可以包含 UTF-8 字符吗?

以 UTF-8 写入文件:

如何以 UTF-8 格式写入文件?

于 2013-09-25T01:59:19.450 回答
0

对于使用日语的应用程序,代码页是 cp932 这可以通过chcp在命令行中使用命令来确认。

在此处输入图像描述

示例代码

$fullPath = $uploadFolderPath."\\".iconv("utf-8", "cp932", $fileName);
move_uploaded_file($this->request->data["file_name"]['tmp_name'], $fullPath);
于 2014-12-09T08:32:24.640 回答