如何在PHP中切断多字节字符串(英文单词和中文字符)?

时间:2015-08-31 11:09:16

标签: php multibyte chinese-locale

我在PHP 5.2.0中使用此函数并不完全,此函数将字符串剪切为所需的长度:

function neat_trim($str, $n, $delim='...')
{
    $len = strlen($str);

    if ($len > $n)
    {
        preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches);
        return rtrim($matches[1]) . $delim;
    }
    return $str;
}

我打电话给

$multibyte_string = "Portion of Chicken for 1 person<br>一人份鸡肉";

echo neat_trim($multibyte_string,42) . "</br>";

将产生

Portion of Chicken for 1 person
一人�...

不幸的是它不适用于PHP-5.4.29,它会产生:

...

我已尝试过thisthis,但没有效果。请帮忙。

1 个答案:

答案 0 :(得分:1)

基于@ Jonny评论的工作代码,再次感谢

function neat_trim($str, $n, $delim='...')
{
    $len = mb_detect_encoding($str) == "UTF-8" ? mb_strlen($str, "UTF-8") : strlen($str);
    if ($len > $n)
    {
        preg_match('/(.{' . $n . '}.*?)\b/us', $str, $matches);
        return rtrim($matches[1]) . $delim;
    }
    return $str;
}