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

WBOY
Release: 2016-06-06 20:47:17
Original
1597 people have browsed it

当文件的路径中含有中文的时候,使用dirname等函数进行处理的时候,会得到不正常的结果

<code><?php $path = 'D:\aaa\bbb\中文路径\中文文件名.html';
var_dump(dirname($path));
exit;
</code></code>
Copy after login
Copy after login

上述代码执行的结果 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等函数进行处理的时候,会得到不正常的结果

<code><?php $path = 'D:\aaa\bbb\中文路径\中文文件名.html';
var_dump(dirname($path));
exit;
</code></code>
Copy after login
Copy after login

上述代码执行的结果 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 上使用如下定义:

<code class="lang-c">#define IS_SLASH_P(c)   (*(c) == '/' || \
        (*(c) == '\\' && !IsDBCSLeadByte(*(c-1))))
</code>
Copy after login

即,如果一个字符是 /,或者它是 \ 同时它前边那个字符小于 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,具体原因得查源码。解决办法是将\分隔符改成/即可。

<code>$path = 'D:/aaa/bbb/中文路径/中文文件名.html';
var_dump(dirname($path)); //string(23) "D:/aaa/bbb/中文路径"
exit;
</code>
Copy after login

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

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!