如何截取PHP中的多字节字符串(英文单词和汉字)?
How to cut off multi-byte string (English word and Chinese character) in 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 上不起作用,它会产生:
...
我试过 this and this 但没用。请帮忙。
工作代码基于@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;
}
我的这个函数在 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 上不起作用,它会产生:
...
我试过 this and this 但没用。请帮忙。
工作代码基于@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;
}