更新:只是为了不让您阅读所有内容:PHP 开头
7.1.0alpha2 在 Windows 上支持 UTF-8 文件名。 (感谢阿纳托尔-贝尔斯基!)
根据 stackoverflow 上的一些链接,我找到了部分答案:
https://stackoverflow.com/a/10138133/3716796 https://stackoverflow.com/a/10138133/3716796作者:翁贝托·萨尔西
(对于同一问题:https://stackoverflow.com/a/2950046/3716796 https://stackoverflow.com/a/2950046/3716796由人工制品)
简而言之:“PHP 作为一个底层文件系统与底层文件系统进行通信”“非 Unicode 识别程序”',因此,Windows 赋予 PHP 的所有文件名(反之亦然)都会由 Windows 自动翻译/重新编码。这会导致错误。而且您似乎无法停止自动重新编码。
(And https://stackoverflow.com/a/2888039/3716796 https://stackoverflow.com/a/2888039/3716796通过人工制品:
"PHP 不使用广泛的 WIN32 API调用,因此您受到代码页的限制。”)
And at https://bugs.php.net/bug.php?id=47096 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['文件名']);
- PHP 现在有什么新功能可以实现这一目标吗?
- 在某些地方我读到PHP 6就可以做到这一点,但是PHP 6如果我没记错的话,已经被撤回了。 ?
- 在 Windows 资源管理器中,我可以将文件名更改为“Крым.xml”。据我了解旧的问题和答案,如果 fileName-var 简单地编码为 Windows 7 使用的编码并且它是 NTFS 光盘,则应该可以使用 file_put_contents 。
甚至有 3 个老问题的答案声称已经成功:
使用 UTF-8 特殊字符的 PHP 文件处理 https://stackoverflow.com/questions/7502685/php-file-handling-with-utf-8-special-characters
在php中将UTF-16LE转换为UTF-8 https://stackoverflow.com/questions/6980068/how-to-convert-utf-16le-to-utf-8-in-php
and PHP:如何创建 unicode 文件名 https://stackoverflow.com/questions/6467501/php-how-to-create-unicode-filenames
总体而言,大多数认可的答案都表示这是不可能的。
我自己已经检查了所有建议的答案,但没有一个有效。
- 如何明确且绝对准确地找出我的 Win 7 和资源管理器以何种编码将文件名保存在 NTFS 光盘上并使用德语设置?
如前所述:我可以在资源管理器中创建一个文件“Крым.xml”。
我的结论:
1. 将 fileName(我尝试转换为 UTF-16、UTF-16LE、ISO-8859-1 和 Windows-1252)移交给 Windows 时,file_put_contents 无法正常工作,
2. 或 file_put_contents 只是没有实现以适当的方式调用 Windows 自己的文件函数的方法(因此第二种可能性意味着它不是一个错误,只是没有实现。)(例如 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 中没有错误”
通过其他转换,我收到其他错误消息,从“无效字符”到根本无法识别字符串。
问候
约翰