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

问题描述 投票:5回答:1

更新:只是为了不让你全部阅读:从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. PHP现在有什么新功能可以实现吗?
  2. 在某些地方,我读过PHP 6就可以做到,但是如果我记得正确,PHP 6已被撤销。 ?
  3. 在Windows资源管理器中,我可以将文件名更改为“Крым.xml”。据我所知,旧的问题和答案应该可以使用file_put_contents,如果fileName-var只是编码为Windows 7使用的编码和它的NTFS光盘。甚至有3个老问题的答案声称已成功: PHP File Handling with UTF-8 Special Characters Convert UTF-16LE to UTF-8 in phpPHP: How to create unicode filenames 总体而言,大多数人认可的答案都说不可能。我已经检查了所有建议的答案,但都没有。
  4. 如何定义并绝对准确地找出,我的Win 7和资源管理器在哪个编码中将文件名保存在我的NTFS光盘上并使用德语设置?如上所述:我可以在资源管理器中创建一个文件“Крым.xml”。

我的结论: 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没有错误”通过其他转换我得到了其他错误消息,从“无效字符”到完全没有识别的字符串。

问候约翰

php encoding utf-8 windows-7 filenames
1个回答
2
投票

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

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.