【问题标题】:How can I copy files in PHP with special unicode characters?如何在 PHP 中复制带有特殊 unicode 字符的文件?
【发布时间】:2020-09-14 09:13:14
【问题描述】:

我必须将一些 pdf 文件从 web 复制到新版本 web 的文件路径。该 pdf 文件在内容中由 html a 链接。

所以我正在做的是使用 regex 获取所有指向 pdf 的链接,将它们复制到新路径并将链接更改为新路径。但是我对一些带有特殊字符的文件有问题。例如:

$original_path = '/path/Dossier%20Nicola%CC%81s%20Combarro_GAL_CAST.pdf'
$decoded_path = urldecode($oiginal_path);
copy($decoded_path, $new_path);

它显示以下错误:

File '/path/Dossier Nicola´s Combarro_GAL_CAST.pdf' could not be copied because it does not exist.

当然存在,但名称为:/path/Dossier Nicolás Combarro_GAL_CAST.pdf。我可以用pdf阅读器打开它,也可以在我点击链接时通过网络浏览器打开它。

似乎 PHP 将 a%CC%81 解码为 ,但 Windows 将其解码为 á。如何正确复制此文件?

我正在使用 Debian 在 VM 上运行 PHP,但文件位于 Windows 10 (NTFS) 的共享文件夹 (NFS) 中。

【问题讨论】:

  • 您使用什么操作系统来托管您的 PHP?你的文件系统的字符编码是什么?
  • @KoalaYeung 我正在使用 Debian 的 VM 上运行 PHP,但文件位于 Windows 10 (NTFS) 的共享文件夹 (NFS) 中。

标签: php unicode copy urldecode


【解决方案1】:

Windows 使用 Windows-1252 字符集作为文件名和路径。如果您使用的是 UTF-8,则需要转换文件名。

例子:

$utf8FileName = 'René.txt';
$windowFileName = mb_convert_encoding($utf8FileName,'Windows-1252','UTF8');

//Filesystem Win10
$content = file_get_contents($windowFileName);

【讨论】:

  • 它不起作用。我的结果相同 Rene´.txt
猜你喜欢
  • 1970-01-01
  • 2017-10-30
  • 2022-01-15
  • 2013-08-23
  • 1970-01-01
  • 2021-08-05
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多