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

問題の理由は次のとおりです。

length が指定され、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 に答える