--- fenglin/lib/str_process.inc.php 2025/03/01 09:02:28 1.9 +++ fenglin/lib/str_process.inc.php 2025/10/30 11:19:14 1.22 @@ -1,64 +1,127 @@ -= $width) + if ($c == "\n") { - $result .= ($line . "\n"); + if ($lines_count + 1 >= $lines_limit) + { + break; + } + + $result .= ($line . $end_of_line); + $lines_count++; $line = $prefix; $line_len = $prefix_len; + continue; } - } - $result .= ($line . "\n"); - return $result; -} + // Process UTF-8 Chinese characters + $v1 = ord($c); + if ($v1 & 0x80) //head of multi-byte character + { + $v2 = ($v1 & 0x70) << 1; + while ($v2 & 0x80) + { + $i++; + $c .= $str[$i]; + $v2 = ($v2 & 0x7f) << 1; + } + + // Each UTF-8 CJK character should use two character length for display + if ($line_len + 2 > $width) + { + if ($lines_count + 1 >= $lines_limit) + { + break; + } + + $result .= ($line . $end_of_line); + $lines_count++; + $line = $prefix; + $line_len = $prefix_len; + } + $line_len += 2; + } + else + { + $line_len++; + } -function str_process($str,$prefix="",$width=76) -{ - $result = ""; - - $lines = explode("\n",str_replace("\r\n","\n",$str)); + if ($line_len > $width) + { + if ($lines_count + 1 >= $lines_limit) + { + break; + } - foreach($lines as $tmp => $line) - { - $result .= split_line($line,$prefix,$width); + $result .= ($line . $end_of_line); + $lines_count++; + $line = $prefix; + $line_len = $prefix_len + 1; + } + + $line .= $c; } - - return $result; -} -function str_b_lines($str,$max_line=1) -{ - $result = ""; - $l = 0; - $lines = explode("\n",str_replace("\r\n","\n",$str)); - foreach($lines as $tmp => $line) + if ($lines_count < $lines_limit) { - $result .= ($line."\n"); - $l += (mb_strlen($line,'UTF-8')/128 + 1); - if ($l >= $max_line) - break; + $result .= $line; } return $result; } - -?>