--- fenglin/lib/str_process.inc.php 2025/03/18 07:10:59 1.10 +++ fenglin/lib/str_process.inc.php 2025/10/18 14:15:35 1.21 @@ -1,18 +1,52 @@ -= $lines_limit) + { + break; + } + + $result .= ($line . $end_of_line); $lines_count++; $line = $prefix; $line_len = $prefix_len; @@ -33,21 +72,25 @@ function split_line($str, $prefix = "", // Process UTF-8 Chinese characters $v1 = ord($c); - if (($v1 & 0b10000000) == 0b10000000) //head of multi-byte character + if ($v1 & 0x80) //head of multi-byte character { - $v2 = ($v1 & 0b01111000) << 1; - while ($v2 & 0b10000000) + $v2 = ($v1 & 0x70) << 1; + while ($v2 & 0x80) { $i++; - $v3 = $str[$i]; - $c .= $v3; - $v2 = ($v2 & 0b01111111 ) << 1; + $c .= $str[$i]; + $v2 = ($v2 & 0x7f) << 1; } // Each UTF-8 CJK character should use two character length for display if ($line_len + 2 > $width) { - $result .= ($line . "\n"); + if ($lines_count + 1 >= $lines_limit) + { + break; + } + + $result .= ($line . $end_of_line); $lines_count++; $line = $prefix; $line_len = $prefix_len; @@ -59,18 +102,26 @@ function split_line($str, $prefix = "", $line_len++; } - $line .= $c; - - if ($line_len >= $width) + if ($line_len > $width) { - $result .= ($line . "\n"); + if ($lines_count + 1 >= $lines_limit) + { + break; + } + + $result .= ($line . $end_of_line); $lines_count++; $line = $prefix; - $line_len = $prefix_len; + $line_len = $prefix_len + 1; } + + $line .= $c; + } + + if ($lines_count < $lines_limit) + { + $result .= $line; } - $result .= ($line . "\n"); return $result; } -?>