当文件的路径中含有中文的时候,使用dirname等函数进行处理的时候,会得到不正常的结果
<?php
$path = 'D:\aaa\bbb\中文路径\中文文件名.html';
var_dump(dirname($path));
exit;
上述代码执行的结果 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 上使用如下定义:
即,如果一个字符是
/
,或者它是\
同时它前边那个字符小于 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.aspxIS_SLASH_P
位于 TSRM/tsrm_virtual_cwd.文件,
php_dirname位于 ext/standard/string.c:1518,
zend_dirname` 中相关代码位于 Zend/zend_compile.c:7184。