更新:只是为了不让你全部阅读:从7.1.0alpha2开始的PHP支持Windows上的UTF-8文件名。 (感谢Anatol-Belski!)
在stackoverflow上的一些链接链接后,我找到了部分答案: 由翁贝托萨尔西的https://stackoverflow.com/a/10138133/3716796 (和同一个问题:Artefacto的https://stackoverflow.com/a/2950046/3716796) 简而言之:'PHP将底层文件系统作为“非Unicode感知程序”进行通信,并且由于Windows所有由Windows提供给PHP的文件名(反之亦然)由Windows自动翻译/重新编码。这会导致错误。你似乎无法阻止自动重新编码。 (和Artefacto的https://stackoverflow.com/a/2888039/3716796: “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.将fileName(我尝试将转换为UTF-16,UTF-16LE,ISO-8859-1和Windows-1252)移交给Windows时,file_put_contents无法正常工作, 2.或者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没有错误”通过其他转换我得到了其他错误消息,从“无效字符”到完全没有识别的字符串。
问候约翰
从7.1.0alpha2开始的PHP支持Windows上的UTF-8文件名。
谢谢。