php中的dirname等函数无法处理中文路径
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php中的dirname等函数无法处理中文路径,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1512字,纯文字阅读大概需要3分钟。
内容图文
![php中的dirname等函数无法处理中文路径](/upload/InfoBanner/zyjiaocheng/236/e0ad2875ec9f416b9522dba2a9b7ecc8.jpg)
上述代码执行的结果 string(10) "D:\aaa\bbb"
执行环境:
Server:Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/0.9.8t PHP/5.4.12
X-Powered-By:PHP/5.4.12
windows7 chrome 32.0.1700.107 m
回复内容:
当文件的路径中含有中文的时候,使用dirname等函数进行处理的时候,会得到不正常的结果
上述代码执行的结果 string(10) "D:\aaa\bbb"
执行环境:
Server:Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/0.9.8t PHP/5.4.12
X-Powered-By:PHP/5.4.12
windows7 chrome 32.0.1700.107 m
这是 PHP 的问题。PHP 在 Windows 上使用如下定义:
#define IS_SLASH_P(c) (*(c) == '/' || (*(c) == '\\' && !IsDBCSLeadByte(*(c-1))))
即,如果一个字符是 /
,或者它是 \
同时它前边那个字符小于 0x80,那么才算是路径分隔符。
IsDBCSLeadByte
: Determines if a specified character is a lead byte for the system default Windows ANSI code page (CP_ACP). A lead byte is the first byte of a two-byte character in a double-byte character set (DBCS) for the code page. http://msdn.microsoft.com/en-us/library/windows/desktop/dd318664%28v=vs.85%29.aspx
IS_SLASH_P
位于 TSRM/tsrm_virtual_cwd.文件,
php_dirname位于 ext/standard/string.c:1518,
zend_dirname` 中相关代码位于 Zend/zend_compile.c:7184。
虽然不知何故,但使用中文路径实属开发之大忌
感觉是php的一个bug,具体原因得查源码。解决办法是将\
分隔符改成/
即可。
$path = 'D:/aaa/bbb/中文路径/中文文件名.html';
var_dump(dirname($path)); //string(23) "D:/aaa/bbb/中文路径"
exit;
最后还是奉劝一句不要用中文做目录以及文件名吧,否则我感觉你会碰上更多坑爹的问题。
内容总结
以上是互联网集市为您收集整理的php中的dirname等函数无法处理中文路径全部内容,希望文章能够帮你解决php中的dirname等函数无法处理中文路径所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。