如何使用特殊的Unicode字符在PHP中复制文件?

问题描述

我必须将一些pdf文件从网上复制到新版网上的文件路径中。该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阅读器打开它,也可以在单击链接时通过网络浏览器打开它。

似乎PHPa%CC%81解码为,而Windows将其解码为á。如何正确复制此文件

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

解决方法

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

示例:

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

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