php路径不能含有中文吗,php中的dirname等函数无法处理中文路径

当文件的路径中含有中文的时候,使用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

回复内容:

当文件的路径中含有中文的时候,使用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;

最后还是奉劝一句不要用中文做目录以及文件名吧,否则我感觉你会碰上更多坑爹的问题。

1428d0e076c3959ab11d28a39bc84fab.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值