问题描述
我必须将一些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阅读器打开它,也可以在单击链接时通过网络浏览器打开它。
似乎PHP将a%CC%81
解码为a´
,而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);