php - 如何在 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
为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);
推荐阅读
- java - press(KeyCode.Enter) 不能多次使用 TestFX?
- swift - 如何从 Vapor 中的数组中创造“未来”?
- android - 如果应用程序处于后台,则不会触发 onNotification 回调。使用 cordova-plugin-fcm-with-dependecy-updated cordova 插件
- sorting - 如何在 Prolog 中对结果列表进行排序?
- html - 为什么我的 div 容器不能与它上面的部分完全对齐?两者之间的边界很薄
- c - 无效的队列信
- android - Google Developper API 不适用于 Android 签名 APK
- django - orm中如何通过查询对结果进行分组
- jquery - 收到 AJAX 响应后,在具有相同类的其他元素中更改单击元素的 html 值
- r - 使用 intersectn() R 的 2 个多面体的交集