为什么 rtrim 会把结尾的 n 去掉呢?

本意是通过 rtrim 函数去除后缀,得到文件名,没想到函数把结尾的 n 给去掉了,真是奇怪啊。

$str = rtrim("test_fdadnnnnnn.json", '.json');
echo $str;// 结果 :test_fdad
最佳答案

这个问题是因为它删的是”.json”这里面包含的所有字符,而不会把这个”.json”当作一个整体来处理哦

4周前 评论
讨论数量: 10

这个问题是因为它删的是”.json”这里面包含的所有字符,而不会把这个”.json”当作一个整体来处理哦

4周前 评论
<?php  


$filename = "test_fdadnnnnnn.json";  
$new_filename = str_replace(".json", "", $filename);  
echo $new_filename;  
// 输出:test_fdadnnnnnn  

这样不就行了

1个月前 评论
瀚海栏杆 (楼主) 4周前

正确方法应该这样写 echo basename('test_fdadnnnnnn.json', '.json');

PHP 官网对 rtrim 函数的签名是这样的 rtrim(string $string, string $characters = " \n\r\t\v\x00"): string 所以删除 n 也不算有问题

1个月前 评论
瀚海栏杆 (楼主) 4周前

我通常用 pathinfo

$filename = pathinfo("a.json", PATHINFO_FILENAME);
$ext = pathinfo("a.json", PATHINFO_EXTENSION);
4周前 评论

这个问题是因为它删的是”.json”这里面包含的所有字符,而不会把这个”.json”当作一个整体来处理哦

4周前 评论

你的需求应该是用 strstr("a.json", '.json', true),而不是 rtrim

trim 系列的方法一般是用来去除冗余字符的,例如 rtrim 去除的是右侧,ltrim 左侧,trim 两侧。去除的字符包括传入的第二个参数所有字符。你给的例子中传入了 .json,则这五个字符如果在给定的字符串前或后存在则均会被去除。

3周前 评论

trim的是字符不是字符串

3周前 评论

上面的GPT解释得很好。

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!