我在 OS X 上进行网站开发,并且经常发现自己将实时网站的某些部分(运行 Linux/LAMP)移动到在我自己的机器上运行的开发服务器上。一个这样的例子涉及下载图像(用户生成的内容,例如通过 ftp 下载),以一种或另一种方式处理它们,然后将它们放回生产站点。
所涉及的图像文件是在 Linux 机器中创建的,它们的文件名似乎使用 NFC 分解以 UTF-8 编码。另一方面,OS X 的 HFS+ 文件系统不允许 NFC 分解文件名并转换为 NFD。但是,一旦我完成并想要上传文件,它们的名称现在将使用 NFD 分解,因为 Linux 支持它们。因此,新上传的(在某些情况下是替换的)文件将无法通过预期的 URL 访问。
我正在寻找一种方法来在(最好)或之后(convmv
看起来是一个不错的选择,但我在此服务器上没有足够的权限在这种特殊情况下是不可能的)传输期间更改文件的 UTF 分解,因为我猜这是不可能事先做的。我已经尝试使用 Transmit 和 rsync(使用通常使用的部署脚本)进行 FTP 上传,但无济于事。rsync中的--iconv
选项似乎很理想,但不幸的是,我运行 rsync 2.6.9 的服务器无法识别它。
我猜很多人都有类似的问题,我很高兴听到任何解决方案或解决方法!
更新:在这种情况下,我最终将文件同步到运行 Ubuntu 的虚拟机,在那里运行 convmv,然后再次同步到我的登台服务器。虽然这工作得相当好,但它有点耗时。也许可以在 OS X 上挂载一个 ext 文件系统,然后使用它们原来的 NFC 分解文件名将文件存储在那里?
此外,为了在以后的 WordPress 安装中避免这个问题,这是我的用例,你可以在上传任何文件add_filter('sanitize_file_name', 'remove_accents');
之前添加一个简单的,你应该没问题。