Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php substr返回空字符串_Php - Fatal编程技术网

Php substr返回空字符串

Php substr返回空字符串,php,Php,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 s

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放在它的returns//stackoverflow.co

中,因为获取空字符串的原因完全是由问题的内容指定的(使用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');
}
function arabicSubStr($value,$start,$length=false){
    $length = ($length) ? $length : mb_strlen($value,'UTF-8') - $start;
    return mb_substr($value,$start,$length,'UTF-8');
}
您需要这样做,因为长度没有表示“字符串的其余部分”的sentinel值。正数(和零)将限制给定的大小,负数将去掉字符串的结尾(如您在问题编辑中所示)

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

  • mb_substr()
    函数将仅将其用作最大值;及
  • 你不能通过任何10公里或以上的线
换言之,大致如下:

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

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

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

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

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

doco()似乎表明情况并非如此
-1
去掉最后一个字符。
-1
不是
$length
的默认值。噢,糟了。这是正确的。我讨厌那样。我总是希望它能反过来工作<代码>-1返回起点之前的所有内容。哑的我们都是对的,之所以会发生错误是因为我将$length定义为false,我来这里是想知道如何忽略$length参数并将其传递到下一个参数,我虽然说过我不会使用strlen,但最后我认为唯一的方法是使用strlen,谢谢你的帮助answer@Alaa,试一试9999选项,它可能会起作用。我没有测试过,但是因为doco states length是从字符串中提取的最大长度,你可能会惊喜。我认为strlen更好,非常感谢你。我真的很惊讶,但不是因为你的评论,因为大多数人都有相同的误解,这导致我的问题被否决,我希望我知道我是如何被否决的