我有$ 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)
我知道原因是因为我将$ length定义为false
我在这里知道我应该在$ length参数中放什么来避免这个错误?
我试图把它返回//stackoverflow.co
答案 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()
函数仅将其用作最大值;和换句话说,就像:
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');
}