使用特殊字符为数据库中的文件名设置正确的编码

yangsunny

我正在尝试使用数据库中的数据创建文件。而且我很难找出如何转换为Windows文件名的正确编码。

数据库位于中latin1_german2_ci,其中包含诸如ä,ö,ü的德语字符。现在,我需要从数据库中获取数据并从中构建文件。例如我$name从数据库中获得$name = "zäng" and "$id = "123"

第一的:

$folder_name = $id . ' - ' . $name;
mkdir($folder_name);
$file_name = $folder_name . '/' . $id;
file_put_contents($file_name . '.lic', $contents);

这将创建文件夹123 - zäng,这是正确的。和一些文件添加到该文件夹​​,如123.lic, 123.rom...

下一步,我想创建一个同名的zip文件:

$zip = new ZipArchive();
$zip_name = $folder_name . '.zip';
$zip->open($zip_name, ZipArchive::CREATE | ZipArchive::OVERWRITE)
// to confirm its working, add an empty folder to the zip
$zip->addEmptyDir("testfolder");

这将创建一个123 - zäng.zip带有子文件夹的文件名testfolder也可以完美地工作。
现在发生了一些奇怪的事情,我必须创建一个与zip文件同名的子文件夹,并将一些文件添加到该子文件夹。我尝试通过实现以下目标addFile

$zip->addFile($file_name . '.lic', $folder_name . '/' . $id . '.lic');

这应该创建这样的东西:

123 - zäng.zip/123 - zäng/123.lic

但是,相反,我在zip文件中创建的文件夹名为name RI15120201 - zõng,特殊字符错误。ZipArchive-API中,有人说

ZipArchive对文件名(本地名)使用IBM850编码。对于带有特殊字符的文件名,例如(é)é在ISO-8859-1中显示为0xE9,在IBM850中为0x82。我必须调用iconv('ISO-8859-1','IBM850','魁北克')来获取正确的文件名。

另外,我发现

latin1(cp1252西欧)归类:

latin1_bin

latin1_danish_ci

latin1_german1_ci

latin1_german2_ci

所以我更改了代码:

iconv('cp1252', 'ibm850', $name);
$folder_name = $id . ' - ' . $name;
mkdir($folder_name);
$file_name = $folder_name . '/' . $id;
file_put_contents($file_name . '.lic', $contents);

但它并没有改变任何东西。我想念什么?为什么是mkdir$zip->open工作而无需转换编码?

罗伯特

这是因为您没有分配iconv()返回的新值

改变

iconv('cp1252', 'ibm850', $name);

$name = iconv('cp1252', 'ibm850', $name);

您可能需要对$ contents做同样的事情

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用HttpHandlers从数据库中检索文件名

来自分类Dev

mysql数据库中特殊字符的JDBC设置

来自分类Dev

使用骆驼数据库中的文件名读取文件内容

来自分类Dev

比较driectory中的文件名与数据库

来自分类Dev

无法在数据库中存储文件名

来自分类Dev

从文件名中删除特殊字符

来自分类Dev

文件名Java中的特殊字符

来自分类Dev

从文件名中删除特殊字符

来自分类Dev

使用php下载文件,文件存储在文件夹中,文件名存储在数据库中

来自分类Dev

设置上下文时,您是否链接文件名或数据库名?

来自分类Dev

使用spring-mvc和hibernate将文件名存储在数据库中,而不是将文件本身存储在数据库中

来自分类Dev

如何以编程方式设置数据库文件名?

来自分类Dev

在Perl中以特殊字符打开文件名中的文件

来自分类Dev

如何使用特殊字符为 AppInsight API 过滤器格式化文件名?

来自分类Dev

无法删除文件名中包含特殊字符的文件

来自分类Dev

无法删除文件名中包含特殊字符的文件

来自分类Dev

上传到GCP存储或使用bucket.getFiles()之后,将文件名保存在数据库中

来自分类Dev

Django 1.6从数据库获取文件的文件名

来自分类Dev

使用特殊字符作为文件名创建文件

来自分类Dev

使用数据库中的文件设置文件树

来自分类Dev

将上传文件的文件名存储在数据库Java中

来自分类Dev

在存储到文件和数据库中之前如何更改文件名

来自分类Dev

c#尝试使用WebClient下载文件名中包含特殊字符的文件

来自分类Dev

由于使用中文文件名上传,PHP无法从数据库下载上传文件

来自分类Dev

在Linux中批量删除文件名中的特殊字符

来自分类Dev

在Windows中从文件名中批量删除特殊字符

来自分类Dev

从powershell中的文件名中删除特殊字符

来自分类Dev

从 MySQL 数据库中获取所有具有特殊字符但我不想对查询中的所有特殊字符使用“或”条件的文件

来自分类Dev

更改bash中具有特殊字符的文件名

Related 相关文章

  1. 1

    使用HttpHandlers从数据库中检索文件名

  2. 2

    mysql数据库中特殊字符的JDBC设置

  3. 3

    使用骆驼数据库中的文件名读取文件内容

  4. 4

    比较driectory中的文件名与数据库

  5. 5

    无法在数据库中存储文件名

  6. 6

    从文件名中删除特殊字符

  7. 7

    文件名Java中的特殊字符

  8. 8

    从文件名中删除特殊字符

  9. 9

    使用php下载文件,文件存储在文件夹中,文件名存储在数据库中

  10. 10

    设置上下文时,您是否链接文件名或数据库名?

  11. 11

    使用spring-mvc和hibernate将文件名存储在数据库中,而不是将文件本身存储在数据库中

  12. 12

    如何以编程方式设置数据库文件名?

  13. 13

    在Perl中以特殊字符打开文件名中的文件

  14. 14

    如何使用特殊字符为 AppInsight API 过滤器格式化文件名?

  15. 15

    无法删除文件名中包含特殊字符的文件

  16. 16

    无法删除文件名中包含特殊字符的文件

  17. 17

    上传到GCP存储或使用bucket.getFiles()之后,将文件名保存在数据库中

  18. 18

    Django 1.6从数据库获取文件的文件名

  19. 19

    使用特殊字符作为文件名创建文件

  20. 20

    使用数据库中的文件设置文件树

  21. 21

    将上传文件的文件名存储在数据库Java中

  22. 22

    在存储到文件和数据库中之前如何更改文件名

  23. 23

    c#尝试使用WebClient下载文件名中包含特殊字符的文件

  24. 24

    由于使用中文文件名上传,PHP无法从数据库下载上传文件

  25. 25

    在Linux中批量删除文件名中的特殊字符

  26. 26

    在Windows中从文件名中批量删除特殊字符

  27. 27

    从powershell中的文件名中删除特殊字符

  28. 28

    从 MySQL 数据库中获取所有具有特殊字符但我不想对查询中的所有特殊字符使用“或”条件的文件

  29. 29

    更改bash中具有特殊字符的文件名

热门标签

归档