【问题标题】:set charset when saving files with php使用 php 保存文件时设置字符集
【发布时间】:2013-09-27 14:42:25
【问题描述】:

我用 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"。这是错误的。 Insted χωΟΞ―Ο, τίτλο 我应该得到“χωρις τιτλο”(顺便说一句,这是希腊语的“无标题”)。那么,我猜是字符集问题?

我该如何解决这个问题?

提前致谢

【问题讨论】:

标签: php character-encoding


【解决方案1】:

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

在处理 UTF8 时同样非常重要的是使用以下两行 MySQL 行来处理GET 请求...

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

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

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

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

【讨论】:

  • 我使用 pgAdmin 更改了表列的排序规则。我将其设置为pg_catalog."C"。那是为了postgreSQL。名称现在保存得很好。但在文件夹中我仍然看到χωΟΞ―Ο‚ τίτλο。在 php 文件中,我有 `header('Content-Type: text/plain; charset=utf-8');` 和 $dbh-&gt;exec("SET NAMES UTF8"); $dbh-&gt;query('SET NAMES UTF8');。当然网页不会渲染图像,因为它会寻找不存在的图像。我应该编辑php文件吗?或者也许是apache服务器?或者是Window的错。我不知道,我迷路了
  • 确保您没有保存带有 BOM(字节顺序标记)的文档。在我的网站上阅读更多信息:jabcreations.com/web/xhtml/editors
  • 我使用 DreamWeaver。有趣的文章。谢谢。在 DreamWeaver 中,编码为 utf8,Unicode 规范化表单为 C,并且未选中包含 Unicode 签名 (BOM)。所以我被覆盖了(?)。我只是不明白它是服务器、数据库还是处理上传的文件。
  • “在我仍然看到的文件夹中...” ...那么您使用什么来查看文件夹?不知道操作系统、文件管理器等。对于 Windows,您必须确保在控制面板中的 Region and Language 下安装了语言支持。我崩溃了,明天我会检查回复。 :)
  • 我有 Windows 7 家庭高级版。 Region and Language 中的默认语言是希腊语。所以...是的...我现在不知道该怎么办...无论如何,谢谢
【解决方案2】:

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

我使用了iconv 函数

所以我像这样更改了move_uploaded_file

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

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 2012-10-17
    • 1970-01-01
    • 2012-03-12
    • 2018-06-10
    • 1970-01-01
    • 2022-01-11
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多