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

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

该函数应采用与wordwrap()完全相同的参数。

特别要确保它能:

  • 如果是$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);
    }
    

    关于php - 适用于UTF-8的多字节安全wordwrap()函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3825226/

    10-12 23:14