PHP - 检测文件系统的字符编码

标签 php

如何检测您的脚本当前运行的文件系统的字符编码,无论是在 Windows 还是 Linux 上?

我有一个表单,用户可以在其中上传文件并为其命名。一旦上传并移动到所需的目的地,文件名称如下:

wéîrd nàmès

将以如下名称保存:

wéîr nàmès

我尝试了 iconvmb_convert_encoding 但我找不到要使用的字符编码。

我不想检测文件本身的字符编码。我想检测将用于保存文件的字符编码。

这是用来上传文件的php:

mkdir ($webdir . '/files/location/' . $doc_name . '/');

if (!move_uploaded_file ($_FILES['docx_file']['tmp_name'], $webdir . '/files/location/' . $doc_name . '/' . $doc_name . '.docx')){
    echo 'docx upload failed miserably..';
    rmdir($webdir . '/files/location/' . $doc_name . '/');
}else{
    echo 'docx upload completed successfully!';
}

假设文件名为dédé

首先,我创建文件夹 $webdir 。 '/files/location/dédé'

然后我将上传的文件移动到 $webdir 。 '/files/location/dédé/dédé.docx'

如果在移动文件时发生错误(并没有发生),我会删除最近创建的文件夹。

除了将保存为 dédé 的文件夹和文件名外,一切顺利。他们两个。

我在运行上面的脚本之前尝试过这个:

echo $doc_name . "\r\n";
echo (mb_detect_encoding($doc_name)) . "\r\n";

它给了我这个结果:

dédé
UTF-8
docx upload completed successfully!

编辑

我在运行上面的脚本之前添加了这个:

echo $doc_name . "\r\n";
echo (mb_detect_encoding($doc_name)) . "\r\n";

$doc_name =  (mb_convert_encoding($doc_name, 'UTF-8', 'ASCII'));

echo $doc_name . "\r\n";
echo (mb_detect_encoding($doc_name)) . "\r\n";

$doc_name 里面有 dédé 并以 UTF-8 编码。

首先它显示了这个:

dédé
UTF-8

然后我使用 mb_convert_encoding 将其从 ASCII 转换为 UTF-8 并显示如下:

dédé
UTF-8

这正是使用的文件名,而不是 dédé

mkdirmove_uploaded_file 是否有可能在之前自动将字符串从 ASCII 转换为 UTF-8保存?有没有可能我已经运行了一些使这成为可能的功能?在这个之前我有一个很长的脚本在运行,我真的不能把它全部放在这里。

最佳答案

好吧,经过这么多时间我认为我的脚本在保存文件夹和文件名之前做了类似的事情:

$doc_name = mb_convert_encoding($doc_name, 'UTF-8', 'ISO-8859-1');

名称已经用 UTF-8 编码,但由于某些未知原因,我的脚本仍尝试将名称从 ISO-8859-1 编码为 UTF -8 导致将 dédé 等字符串更改为 dédé

所以我尝试通过使用将名称从 UTF-8 编码为 ISO-8859-1 来修复它:

$doc_name = iconv('UTF-8', 'ISO-8859-1', $doc_name);

我认为我的脚本会自动将它返回到 UTF-8,我得到了这个:

Original: dédé ===> Encoded in ISO-8859-1: d�d� ===> Encoded to UTF-8: dédé

它奏效了。

mkdir(),

rmdir(),

is_dir(),

move_uploaded_files(),

file_exists(),

重命名()..

它们都需要将字符串编码为 ISO-8859-1,但是,is_dir() 可用于 UTF-8

关于PHP - 检测文件系统的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32564046/

相关文章:

php - 注册脚本,需要检查数据库输入,然后在注册时删除

php - MySQL中如何添加记录而不导致重复?

php - 从两个 MySQL 查询 PHP 加载菜单和子菜单

php - 搜索栏失效

php - 通过 while 循环插入多行

php - 如何在 php 中正确打印此标记

php - 通过多个 ajax 调用更新 session

php - MySQL获取没有最后一条记录的记录

php - 源代码中的 TAB 字符是否错误?

php - 对数组的引用在 PHP 中未按预期工作