我有以下代码
<?php
if ($handle = opendir('C:/xampp/htdocs/movies')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo $file."<br />\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”等函数在 Windows 下对文件名进行本机 Unicode 访问。我预计这会在 PHP6 中发生,但目前您可能已经吃饱了。您可以将系统代码页更改为 cp932 来访问文件名,但对于 Shift-JIS 之外的任何其他 Unicode 字符,您仍然会得到“?”字符,并且无论如何,您确实don't想让应用程序的内部字符串全部采用 Shift-JIS,因为这是一种非常糟糕的编码。
如果是您自己的脚本选择如何存储文件,我强烈建议在本地使用简单的基于主键的文件名,例如“4356”,将真实的文件名放入数据库中,并使用重写/尾随路径部分来提供文件网址。即使不必担心 Unicode,将用户提供的文件名保留在您自己的本地文件名中也很困难,并且会引发安全灾难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)