【发布时间】:2017-04-26 22:05:57
【问题描述】:
我正在使用jqueryFileTree 在服务器上显示目录列表,其中包含指向目录中文件的下载链接。 最近我遇到了包含特殊字符的文件的问题:
- test.pdf:工作正常
- tést.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 锐角字符刚刚被删除(因此 tést.pdf 变为 tst.pdf)
使用 xdebug 调试我的 php 脚本时,我可以看到源字符串包含一个未知字符(看起来像 this)。
所以我很想在这里找到解决方案。 欢迎任何帮助。
仅供参考:
- 我页面的字符集是 UTF-8(在元数据中指定)
- 文件存储在 Windows 2003 文件服务器上,scandir() 使用 UNC 路径执行(例如 //fileserver/sharename/sourcedir)
- 我的 php.ini 中的默认编码设置为 UTF-8
- 网络服务器和 PHP 5.4.26 正在 Windows 2008 R2 服务器上运行
【问题讨论】:
标签: php utf-8 character-encoding