Php 为什么';在这种情况下,mb_substr和mb_strlen是否按预期工作?

Php 为什么';在这种情况下,mb_substr和mb_strlen是否按预期工作?,php,Php,我正在尝试删除字符串的第一个和最后一个字符。我感到很奇怪 请查看: $string = 'This is a test.'; $string = mb_substr($string, 1, mb_strlen($string) - 1); var_dump($string); 输出: string(14) "his is a test." string(13) "his is a test" 然后这个: $string = 'This is a test.'; $string = mb_s

我正在尝试删除字符串的第一个和最后一个字符。我感到很奇怪

请查看:

$string = 'This is a test.';
$string = mb_substr($string, 1, mb_strlen($string) - 1);
var_dump($string);
输出:

string(14) "his is a test."
string(13) "his is a test"
然后这个:

$string = 'This is a test.';
$string = mb_substr($string, 1, mb_strlen($string) - 2);
var_dump($string);
输出:

string(14) "his is a test."
string(13) "his is a test"

字符串的长度减去1应该足够了,但我必须减去2。为什么?

因为您的字符串
这是一个测试。
长度15

要获得没有最后一个和第一个符号的新字符串,您需要13个符号,这正是
mb_strlen($string)-2


另外,of
mb_substr
不是最后考虑的符号的位置,而是您想要接收的子字符串的长度。

对不起。我不明白这个答案。就好像你想继续写解释,但点击“添加评论”太快了?你到底不明白什么?不带2个符号的字符串的长度为13。接下来,你从一个位置得到13个符号,这给了你你所需要的。我想我在我的问题中描述了我的困惑。为什么字符串的长度减去1个字符不删除最后一个字符?我遗漏了什么?因为你从位置1的字符开始,这是第二个字符。嗯。是 啊我想我一定是看错了手册。它说的是长度。我想这会让人衰老。