UTF-8,PHP,Win7 - 现在是否有解决方案使用PHP在Win 7上保存UTF-8文件名?

Joh*_*015 5 php filenames encoding utf-8 windows-7

更新:只是为了不让你全部阅读:从7.1.0alpha2开始的PHP支持Windows上的UTF-8文件名.(感谢Anatol-Belski!)

在stackoverflow上的一些链接链接后,我找到了部分答案: Umberto Salsi的
/sf/answers/709669341/
(以及同一个问题:https://stackoverflow.com/a/2950046/3716796 by Artefacto)
简而言之:'PHP与底层文件系统进行通信,作为"非Unicode感知程序",并且由于Windows,所有由PHP提供给PHP的文件名(反之亦然)由Windows自动翻译/重新编码.这会导致错误.你似乎无法阻止自动重新编码.
(和/sf/answers/202162761/ 由Artefacto:
" PHP不使用宽WIN32 API调用,所以你用的代码页的限制.")
而在HTTPS://bugs.php. net/bug.php?id = 47096 有PHP的错误报告.

虽然在那里尼古拉斯建议,COM对象可能会工作!
$ fs = new COM('Scripting.FileSystemObject',null,CP_UTF8);

也许我会有时候尝试一下.

所以我的问题还有一部分:PHP6出来了,还是被撤回了,或者PHP上有关于该主题的新内容?

//完整问题
关于这个主题的大多数问题都是1到5年.php现在可以使用file_put_contents($ dir.'/'.$ _POST ['fileName'],$ _POST ['content'])保存文件;

当$ _POST ['fileName']是UTF-8编码时,例如"Крым.xml"?目前它保存为КрÑ<м.xml

我检查了fileName变量,所以我可以确定它是UTF-8:echo mb_detect_encoding($ _ POST ['fileName']);

  1. PHP现在有什么新功能可以实现吗?
  2. 在某些地方,我读过PHP 6就可以做到,但是如果我记得正确,PHP 6已被撤销.?
  3. 在Windows资源管理器中,我可以将文件名更改为"Крым.xml".据我所知,旧的问题和答案应该可以使用file_put_contents,如果fileName-var只是编码为Windows 7使用的编码和它的NTFS光盘.甚至还有3个老问题,答案声称已成功:
    使用UTF-8特殊字符的PHP文件处理
    在php
    PHP 中将UTF-16LE转换为UTF-8 :如何创建unicode文件名

    整体和大多数批准的答案说它不是可能.我已经检查了所有建议的答案,但都没有.
  4. 如何定义并绝对准确地找出,我的Win 7和资源管理器在哪个编码中将文件名保存在我的NTFS光盘上并使用德语设置?如上所述:我可以在资源管理器中创建一个文件"Крым.xml".

我的结论:
1.当将fileName(我尝试将转换为UTF-16,UTF-16LE,ISO-8859-1和Windows-1252)移交给Windows,
2或file_put_contents 时,file_put_contents无法正常工作 没有实现以适当的方式调用Windows自己的文件函数的方法(所以第二种可能性意味着它不是一个bug而只是没有实现.)(例如,notepad ++创建,编写和重命名一个名为Крым的文件没有问题.XML).

我收到的错误消息只是一个例子,在这种情况下,当我使用mb_convert_encoding($ theFilename,'Windows-1252','UTF-8')时

"警告:file_put_contents(dirToSaveIn/????.xml):无法打开流:第26行的C:\ aa xampp\htdocs\myinterface.lo\myinterface\phpWriteLocalSearchResponseXML.php没有错误"通过其他转换我得到了其他错误消息,从"无效字符"到完全没有识别的字符串.

问候约翰

Ana*_*ski 2

PHP 从 7.1.0alpha2 开始支持 Windows 上的 UTF-8 文件名。

谢谢。