我使用jqueryFileTree显示服务器上的目录列表,其中包含目录中文件的下载链接。 最近我碰到的一个问题,与包含特殊字符的文件:PHP scandir()和htmlentities():字符集和/或特殊字符问题
- 检验.pdf:正常工作
- 检验.pdf:不工作(注意é - 锐音符 - 在文件名)
当调试jqueryFileTree的PHP连接器,我看到它的操作的方式从$ _GET通过目录的SCANDIR(),然后在目录中的每个文件/目录循环。 在将文件名解析为url之前,脚本似乎在文件名上正确执行了htmlentities()。 问题似乎是这个htmlentities($ file)调用只是返回一个空字符串,根据php docs,当输入字符串在给定编码中包含无效的代码单元时,可能会出现这种情况。但我试图通过调用隐式传递字符集:
$file = htmlentities($file,ENT_QUOTES,'UTF-8');
但是,这也返回一个空字符串。
如果我打电话: $ file = htmlentities($ file,ENT_IGNORE,'UTF-8'); 急性字符刚甩掉E(因此成为检验.pdf tst.pdf)
调试时我用Xdebug的PHP脚本,我可以看到源字符串包含未知字符(看起来像this)。
所以我非常想知道这个解决方案。 任何帮助将受到欢迎。
FYI:
- 我的网页的字符集是UTF-8(在元数据中指定)
- 该文件存储在Windows 2003文件服务器和SCANDIR()与UNC路径执行(如//文件服务器/共享名/ sourcedir)
- 在我的php.ini的默认编码设置为UTF-8
- 的Web服务器& PHP 5.4.26的是Windows上运行2008 R2服务器
谢谢队友!我试图iconv(),但只尝试'WINDOWS-1251',而不是1252变种,去图:-)我能修复我的脚本感谢这个答案,享受赏金:) – Alex
请添加逗号在“mb_convert_encoding($ filename,'UTF-8',...”)之后,我会提示一个编辑,但我必须添加其他字符才能验证它(因为编辑至少应该是6个字符) –
@MarcoPanichi谢谢指出! –