multibyte — Как обрезать многобайтовую строку (английское слово и китайский символ) в PHP?

У меня эта функция работает не совсем в 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, он будет производить:

...

я пробовал этот а также этот но не сработало. Пожалуйста помоги.

3

Решение

Рабочий код на основе комментария @ Джонни, еще раз спасибо

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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]