/[LeafOK_CVS]/fenglin/lib/str_process.inc.php
ViewVC logotype

Diff of /fenglin/lib/str_process.inc.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.9 by sysadm, Sat Mar 1 09:02:28 2025 UTC Revision 1.13 by sysadm, Fri Mar 28 10:31:26 2025 UTC
# Line 1  Line 1 
1  <?  <?
2    function str_length($str)
3    {
4            $len = strlen($str);
5            $ret = 0;
6    
7            for ($i = 0; $i < $len; $i++)
8            {
9                    $c = $str[$i];
10    
11  function split_line($str,$prefix="",$width=76)                  // Process UTF-8 Chinese characters
12                    $v1 = ord($c);
13                    if (($v1 & 0b10000000) == 0b10000000) //head of multi-byte character
14                    {
15                            $v2 = ($v1 & 0b01111000) << 1;
16                            while ($v2 & 0b10000000)
17                            {
18                                    $i++;
19                                    $v3 = $str[$i];
20                                    $c .= $v3;
21                                    $v2 = ($v2 & 0b01111111 ) << 1;
22                            }
23    
24                            $ret += 2;
25                    }
26                    else
27                    {
28                            $ret++;
29                    }
30            }
31    
32            return $ret;
33    }
34    
35    function split_line($str, $prefix = "", $width = 76, $lines_limit = PHP_INT_MAX, $end_of_line = "\n")
36  {  {
37          if ($width<=0)          if ($width <= 0)
38                  return $str;                  return $str;
39                    
40          $result = "";          $result = "";
41          $len = mb_strlen($str,'UTF-8');          $len = strlen($str);
42          $prefix_len = mb_strlen($prefix,'UTF-8');          $prefix_len = str_length($prefix);
43    
44            $lines_count = 0;
45    
46          $line = $prefix;          $line = $prefix;
47          $line_len = $prefix_len;          $line_len = $prefix_len;
48          for($i=0;$i<$len;$i++)          for ($i = 0; $i < $len && $lines_count < $lines_limit; $i++)
49          {          {
50                  $c = mb_substr($str,$i,1,'UTF-8');                  $c = $str[$i];
                 $line.=$c;  
   
                 // Each UTF-8 CJK character should use two character length for display  
                 $line_len += (strlen($c) <= 2 ? 1 : 2);  
51    
52                  if ($line_len >= $width)                  // Skip special characters
53                    if ($c == "\r" || $c == "\7")
54                    {
55                            continue;
56                    }
57                                    
58                    if ($c == "\n")
59                  {                  {
60                          $result .= ($line . "\n");                          if ($lines_count + 1 >= $lines_limit)
61                            {
62                                    break;
63                            }
64    
65                            $result .= ($line . $end_of_line);
66                            $lines_count++;
67                          $line = $prefix;                          $line = $prefix;
68                          $line_len = $prefix_len;                          $line_len = $prefix_len;
69                            continue;
70                  }                  }
         }  
         $result .= ($line . "\n");  
71    
72          return $result;                  // Process UTF-8 Chinese characters
73  }                  $v1 = ord($c);
74                    if (($v1 & 0b10000000) == 0b10000000) //head of multi-byte character
75                    {
76                            $v2 = ($v1 & 0b01111000) << 1;
77                            while ($v2 & 0b10000000)
78                            {
79                                    $i++;
80                                    $v3 = $str[$i];
81                                    $c .= $v3;
82                                    $v2 = ($v2 & 0b01111111 ) << 1;
83                            }
84    
85                            // Each UTF-8 CJK character should use two character length for display
86                            if ($line_len + 2 > $width)
87                            {
88                                    if ($lines_count + 1 >= $lines_limit)
89                                    {
90                                            break;
91                                    }
92    
93                                    $result .= ($line . $end_of_line);
94                                    $lines_count++;
95                                    $line = $prefix;
96                                    $line_len = $prefix_len;
97                            }
98                            $line_len += 2;
99                    }
100                    else
101                    {
102                            $line_len++;
103                    }
104    
105  function str_process($str,$prefix="",$width=76)                  $line .= $c;
 {  
         $result = "";  
           
         $lines = explode("\n",str_replace("\r\n","\n",$str));  
106    
107          foreach($lines as $tmp => $line)                  if ($line_len >= $width)
108          {                  {
109                  $result .= split_line($line,$prefix,$width);                          if ($lines_count + 1 >= $lines_limit)
110                            {
111                                    break;
112                            }
113    
114                            $result .= ($line . $end_of_line);
115                            $lines_count++;
116                            $line = $prefix;
117                            $line_len = $prefix_len;
118                    }
119          }          }
           
         return $result;  
 }  
120    
121  function str_b_lines($str,$max_line=1)          if ($lines_count < $lines_limit)
 {  
         $result = "";  
         $l = 0;  
         $lines = explode("\n",str_replace("\r\n","\n",$str));  
         foreach($lines as $tmp => $line)  
122          {          {
123                  $result .= ($line."\n");                  $result .= $line;
                 $l += (mb_strlen($line,'UTF-8')/128 + 1);  
                 if ($l >= $max_line)  
                         break;  
124          }          }
125    
126          return $result;          return $result;
127  }  }
   
128  ?>  ?>


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1