您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php中的dirname等函数无法处理中文路径

2026/1/10 19:21:13发布14次查看
当文件的路径中含有中文的时候,使用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;
最后还是奉劝一句不要用中文做目录以及文件名吧,否则我感觉你会碰上更多坑爹的问题。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product