我有以下代码
\n"; } } closedir($handle); } ?>
当它有像日语这样的mb语言时,它不能正常显示而是显示像kyuukyoku Choujin R ?????~?而不是kyuukyoku Choujin R研极极人あ〜る
无论如何要让它显示正确的名称或使其仍可由其他人下载?
谢谢你帮助我:)
我不能肯定地说PHP,但我怀疑它与Python 2的基本问题相同(之前添加了对Unicode字符串文件名的特殊支持).
我相信PHP正在使用标准C库'open'-et-al函数来处理文件名,这些函数是基于字节的.在Windows(NT)上,这些尝试使用系统代码页对真实的Unicode文件名进行编码.这可能是西方机器的cp1252(类似于ISO-8859-1),或日本机器上的cp932(类似于Shift-JIS).对于系统代码页中不存在的任何字符,您将获得"?" 字符,你将无法引用该文件.
为了解决这个问题,PHP必须像Python 3.0一样开始使用Unicode字符串作为文件名(以及其他所有内容),使用'_wopen'-et-al函数来获取Windows下文件名的本机Unicode访问.我希望这会发生在PHP6中,但目前你可能已经填满了.您可以将系统代码页更改为cp932以访问文件名,但您仍然可以获得'?' 其他任何Unicode字符的字符不是在按住Shift JIS,在任何情况下,你真的不希望你的应用程序的内部串所有的移位,JIS,因为它是一个相当可怕的编码.
如果你自己的脚本选择如何存储文件,我强烈建议在本地使用简单的基于主键的文件名,如'4356',将真实的文件名放在数据库中,并使用重写/尾随路径部分提供文件. URL.将用户提供的文件名保存在您自己的本地文件名中是困难的,并且即使不必担心Unicode也会导致安全灾难.