2

我对 substr 函数的 $length 有疑问

我的代码

$string='I love stackoverflow.com';
function arabicSubStr($value,$start,$length=false){
    return mb_substr($value,$start,$length,'UTF-8');
}

echo arabicSubStr($string,7);//outputs nothing
echo substr($string,7);//outputs stackoverflow.com

问题的原因是:

如果给定长度并且为 0、FALSE 或 NULL,则将返回一个空字符串。

那么,我该如何解决这个问题?

我不会用strlen($string)

编辑

我知道原因是因为我将 $length 定义为 false

我在这里知道我应该在 $length 参数中输入什么以避免此错误?

我试图把 -1 它返回 //stackoverflow.co

4

2 回答 2

3

由于您获得空字符串的原因完全由您的问题内容指定(使用 0、FALSE 或 NULL),我假设您只是想要一种方法来获取字符串的其余部分。

在这种情况下,我会使用类似的东西:

function arabicSubStr ($value, $start, $length = -1) {
    if ($length == -1)
        $length = mb_strlen ($value, 'UTF-8') - $start;
    return mb_substr ($value, $start, $length, 'UTF-8');
}

您需要这样做,因为没有长度的标记值表示“字符串的其余部分”。正数(和零)会将大小限制为给定的大小,负数将剥离字符串的末尾(如您在问题编辑中所示)。

如果您真的不想使用字符串长度函数,您可以尝试9999(甚至更高)的值并希望:

  • mb_substr()函数只会将其用作最大值;和
  • 您不会传递任何 10K 或更多的字符串。

换句话说,类似于以下内容:

function arabicSubStr ($value, $start, $length = 9999){
    return mb_substr ($value, $start, $length, 'UTF-8');
}

虽然请记住我没有测试过,但我当前位置没有任何 PHP 环境。

于 2012-06-10T05:51:14.883 回答
0

这是因为您已将其$length设置false为函数的默认参数,这意味着您希望它返回一个长度为 0 的子字符串。

不幸的是,如果您必须设置我想象的最终参数(字符集),那么您必须首先计算字符串的长度,例如:

function arabicSubStr($value,$start,$length=false){
    $length = ($length) ? $length : mb_strlen($value,'UTF-8') - $start;
    return mb_substr($value,$start,$length,'UTF-8');
}
于 2012-06-10T05:53:31.273 回答