相关疑难解决方法(0)

PHP basename()和pathinfo()具有多字节UTF-8文件名

我发现PHP函数basename()以及pathinfo()对于多字节utf-8名称都具有奇怪的行为。它们会删除所有非拉丁字符,直到第一个拉丁字符或标点符号为止。但是,此后,将保留后续的非拉丁字符。

basename("àxà"); // returns "xà", I would expect "àxà" or just "x" instead
pathinfo("àyà/àxà", PATHINFO_BASENAME); // returns "xà", same as above
Run Code Online (Sandbox Code Playgroud)

但奇怪的是pathinfo()的目录名部分工作正常:

pathinfo("àyà/àxà", PATHINFO_DIRNAME); // returns "àyà"
Run Code Online (Sandbox Code Playgroud)

PHP文档警告basename()pathinfo()函数知道区域设置,但这并不能说明pathinfo(..., PATHINFO_BASENAME)和之间的不一致pathinfo(..., PATHINFO_DIRNAME),更不用说根据它们相对于拉丁语的位置,相同的非拉丁语字符将被丢弃还是被接受的事实。字符。

听起来像是一个PHP错误。

由于“基本名称”检查对于避免直接遍历对安全性而言非常重要,因此是否有任何可靠的基本名称过滤器可以很好地与Unicode输入配合使用?

php unicode utf-8 pathinfo

6
推荐指数
1
解决办法
1451
查看次数

当文件名以重音开头时,basename()失败

这是显示问题的一个简单示例:

print basename('léquipe.jpg'); // léquipe.jpg
print basename('équipe.jpg');  // quipe.jpg
Run Code Online (Sandbox Code Playgroud)

如何避免这种不一致,并确保basename()将整个文件名返回给我?

谢谢

php filenames

5
推荐指数
1
解决办法
2013
查看次数

标签 统计

php ×2

filenames ×1

pathinfo ×1

unicode ×1

utf-8 ×1