new*_*php 3 php windows filesystems encoding utf-8
file_exists()并且file_get_contents()在一个名为output‹ÕÍÕ¥.txt(例如)的文件上失败,虽然我知道它存在?
我猜它与文件名中的特殊字符有关?
所以想知道什么是解决方法?
感谢所有回复.
供参考:
请注意,如果您的想法为什么不简单地更改文件名? - 我不能,因为文件名一般是生成的,更改文件名将意味着使用PHP的文件函数(似乎不允许文件名args中的特殊字符 - 除非我误解/误解了任何东西).
我在Windows上使用PHP 5.2.
确保文件系统的编码与PHP代码中包含文件名的字符串的编码相同.
否则,您正在测试存在的错误文件.
例如,如果您的文件系统不支持UTF-8,但文件名以UTF-8编码.
编辑:
所以你评论说文件名是UTF-8而你正在使用windows.
这正是我的答案所在.正如这里所写:
Windows用户的坏消息:Windows文件系统(FAT,FAT32,NTFS)不支持UTF-8.文件名以ISO-8859-1或CP437/CP850 /(或任何适合您的语言)编码,具体取决于文件系统和本地化.因此,如果您遵循本指南,您可能会在尝试将文件名从数据库与文件系统匹配时遇到麻烦.(虽然我从未尝试过.)
Windows解决方法:现代Windows版本在已安装的共享上支持UTF-8.分享您的媒体文件夹并将其作为网络驱动器安装.
因此,要么在实际使用文件系统的编码中进行共享或编码文件名.这不是PHP中的错误.你只是没有检查正确的文件名,就是这样.
EDIT2:
假设你有NTFS 可以接受UTF-16(这是不是真的准确AFAIK,但你可以试试看),你可以在UTF-8的文件名转换为UTF-16文件名:
$name = mb_convert_encoding($name, 'UTF-16', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
然后尝试file_exists是否有效.请记住,他可能不是技术上是正确的,而你可能有一个额外的编码问题,它会阻止您正确使用,即使重新编码此.
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |