适用于UTF-8的多字节安全wordwrap()函数 [英] Multi-byte safe wordwrap() function for UTF-8

查看:93
本文介绍了适用于UTF-8的多字节安全wordwrap()函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

PHP的 wordwrap() 函数不适用于UTF-8等多字节字符串.

PHP's wordwrap() function doesn't work correctly for multi-byte strings like UTF-8.

注释中有一些mb安全功能示例,但是使用一些不同的测试数据,它们似乎都存在一些问题.

There are a few examples of mb safe functions in the comments, but with some different test data they all seem to have some problems.

该函数应使用与wordwrap()完全相同的参数.

The function should take the exact same parameters as wordwrap().

特别确定它可以:

  • 如果$cut = true,则剪切中间词,否则不要剪切中间词
  • 如果$break = ' '
  • ,请勿在单词中插入多余的空格
  • 也适用于$break = "\n"
  • 适用于ASCII和所有有效的UTF-8
  • cut mid-word if $cut = true, don't cut mid-word otherwise
  • not insert extra spaces in words if $break = ' '
  • also work for $break = "\n"
  • work for ASCII, and all valid UTF-8

推荐答案

这个似乎很好用...

This one seems to work well...

function mb_wordwrap($str, $width = 75, $break = "\n", $cut = false, $charset = null) {
    if ($charset === null) $charset = mb_internal_encoding();

    $pieces = explode($break, $str);
    $result = array();
    foreach ($pieces as $piece) {
      $current = $piece;
      while ($cut && mb_strlen($current) > $width) {
        $result[] = mb_substr($current, 0, $width, $charset);
        $current = mb_substr($current, $width, 2048, $charset);
      }
      $result[] = $current;
    }
    return implode($break, $result);
}

这篇关于适用于UTF-8的多字节安全wordwrap()函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆