basename php 中文,php basename不支持中文怎么办

basename php 中文,php basename不支持中文怎么办不久前遇到一段代码使用了 basename 我文件名是中文的 每次返回都只有后缀 后来发现 basename 函数有猫腻 不支持中文文件名 但凡有以中文开头的文件名将被忽略了 函数说明 从路径中返回文件名 paramstring path 在 Windows 中无论是斜线 和反斜杠 作为目录分隔符 在其他环境中 它是前斜杠 paramstring suffix op

不久前遇到一段代码使用了basename,我文件名是中文的,每次返回都只有后缀。后来发现basename函数有猫腻,不支持中文文件名,但凡有以中文开头的文件名将被忽略了。

函数说明/

* 从路径中返回文件名

* @param string $path

* 在Windows中无论是斜线(/)和反斜杠(\)作为目录分隔符。在其他环境中,它是前斜杠(/)

* @param string $suffix [optional] 可选。规定文件扩展名。过滤后缀结尾

* @return string 文件名

* @since 4.0

* @since 5.0

*/

function basename($path, $suffix = null){}

演示例子$path = “我是中文名.jpg”;

$res = basename($path);

var_dump($res);

//string ‘.jpg’ (length=4)

有大神前辈说了问题出在底层mblen,它发现全是中文的时候会返回负数。不以中文开头,可以骗过mblen。

不以中文件名开头试下:$path = “a我是中文名.jpg”;

$res = basename($path);

var_dump($res);

//string ‘a我是中文名.jpg’ (length=20)

厉害了,我的哥。

然而我的系统并不能保证全部文件名都是英文开头的。那怎么办呢,查了很多资料,用了很多办法都没有用。最后还是,寻找代替方案。找到了以下几个方案:

方案1$path = “/路径/我是中文名.jpg”;

$res = substr($path, strrpos($path, ‘/’)+1);

var_dump($res);

方案2$path = “/路径/我是中文名.jpg”;

$res = preg_replace(‘/^(.+[\\/])|(\\/)/’, ”, $path);

var_dump($res);

方案3$path = “/路径/我是中文名.jpg”;

$res = explode(‘/’,$path);

$res = end($res);

var_dump($res);

方案4$path = “/路径/我是中文名.jpg”;

$res = explode(“/”,$path);

$res = array_pop($res);

var_dump($res);

方案5$path = “/路径/我是中文名.jpg”;

$res = ltrim(substr($path, strrpos($path, ‘/’)),’/’);

var_dump($res);

路过的朋友,如有更好的办法,请不吝赐教!

原创文章,转载请注明出处:https://www.weizhixi.com/article/30.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229737.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午4:00
下一篇 2026年3月16日 下午4:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号