首页 > 解决方案 > 如何在 PHP 中复制带有特殊 unicode 字符的文件?

问题描述

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

所以我正在做的是使用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) 中。

标签: phpunicodecopyurldecode

解决方案


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

例子:

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

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

推荐阅读