substr返回空字符串

时间:2012-06-10 05:46:34

标签: php

我有$ subs substr函数的问题

我的代码

$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

问题的原因是:

  

如果给出length并且为0,则为FALSE或NULL,将返回空字符串。

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

我不会使用strlen($string)

EDITE

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

我在这里知道我应该在$ length参数中放什么来避免这个错误?

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

2 个答案:

答案 0 :(得分: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');
}

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

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

  • mb_substr()函数仅将其用作最大值;和
  • 你不会传入任何10K或以上的字符串。

换句话说,就像:

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

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

答案 1 :(得分:0)

这是因为您将$length设置为false作为函数的默认参数,有效的意思是您希望它返回0长度的子字符串。

不幸的是,如果你必须设置我想象你做的最后一个参数(charset),那么你必须首先计算字符串的长度,如下所示:

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