0

UTF8で文字列をカットする方法.

私はこの機能をウェブから検索しました:

function cutString($str, $lenght = 100, $end = ' …', $charset = 'UTF-8', $token = '~') {
    $str = strip_tags($str);
    if (mb_strlen($str, $charset) >= $lenght) {
        $wrap = wordwrap($str, $lenght, $token);
        $str_cut = mb_substr($wrap, 0, mb_strpos($wrap, $token, 0, $charset), $charset);   
        return $str_cut .= $end;
    } else {
        return $str;
    }
}

しかし、この関数の結果はあまり良くありません。200文字切るように設定すると110文字ほど返ってきますが、200文字ほど必要です。

4

2 に答える 2

-1

私はちょうどそれをテストしました、そして、それはうまくいきます。で実行すると

echo cutString($mystring, 200);

指定した文字列から 201 文字を返します。

于 2012-12-09T22:21:59.257 に答える
-1

この場合、wordwrap() 関数が間違っていると思います。文字列を手動でカットします。私はこのような関数を使用します (文字列関数に 'mb_' と $charset を追加するだけです):

function str_cut_end_by_word($s, $max_len, $trailer = "...")
{
  if (strlen($s) <= $max_len)
    return $s;

  $s = trim($s);
  $s = substr($s, 0, $max_len);

  for ($i = strlen($s) - 1; $i >= 0; $i--)
  {
    if (in_array($s{$i}, array(" ", "\t", "\r", "\n")))
    {
      return rtrim(substr($s, 0, $i)).$trailer;
    }
  }

  return $s;
}
于 2012-12-09T22:28:40.613 に答える