PHP's wordwrap() https://www.php.net/wordwrap对于 UTF-8 等多字节字符串,该函数无法正常工作。
评论中有一些mb安全函数的例子,但是根据一些不同的测试数据,它们似乎都存在一些问题。
该函数应采用与以下完全相同的参数wordwrap()
.
具体来说,请确保它能够:
- 切掉单词中间 if
$cut = true
,否则不要在单词中间剪切
- 不在单词中插入额外的空格,如果
$break = ' '
- 也为
$break = "\n"
- 适用于 ASCII 和所有有效的 UTF-8
我还没有找到任何适合我的工作代码。这是我写的。对我来说它正在工作,但认为它可能不是最快的。
function mb_wordwrap($str, $width = 75, $break = "\n", $cut = false) {
$lines = explode($break, $str);
foreach ($lines as &$line) {
$line = rtrim($line);
if (mb_strlen($line) <= $width)
continue;
$words = explode(' ', $line);
$line = '';
$actual = '';
foreach ($words as $word) {
if (mb_strlen($actual.$word) <= $width)
$actual .= $word.' ';
else {
if ($actual != '')
$line .= rtrim($actual).$break;
$actual = $word;
if ($cut) {
while (mb_strlen($actual) > $width) {
$line .= mb_substr($actual, 0, $width).$break;
$actual = mb_substr($actual, $width);
}
}
$actual .= ' ';
}
}
$line .= trim($actual);
}
return implode($break, $lines);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)