-
/**
- @ Intercept Chinese strings for GB2312 encoding
- @http://bbs.it-home.org
- */
- function Fsubstr ($title, $start, $len = "", $magic =true)
- {
- $length = 0;
- if ($len = = "") $len = strlen ($title);
-
Judging starting as an incorrect location
- if ($start > 0)
- {
- $cnum = 0;
- for ($i =0; $i < $start; $i + +)
- {
- if (Ord (substr ($title, $i, 1)) >=) $cnum + +;
- }
- if ($cnum%2! = 0) $start-;
-
Unset ($cnum);
- }
-
if (strlen ($title) <= $len) return substr ($title, $start, $len);
-
$alen = 0;
- $blen = 0;
-
$realnum = 0;
-
for ($i = $start; $i<>
- {
-
- $ctype = 0;
- $cstep = 0;
- $cur = substr ($title, $i, 1);
- if ($cur = = "&")
- {
- if (substr ($title, $i, 4) = = "<")
- {
- $cstep = 4;
- $length + = 4;
- $i + = 3;
- $realnum + +;
- if ($magic)
- {
- $alen + +;
- }
- }
- else if (substr ($title, $i, 4) = = ">")
- {
- $cstep = 4;
- $length + = 4;
- $i + = 3;
- $realnum + +;
- if ($magic)
- {
- $alen + +;
- }
- }
- else if (substr ($title, $i, 5) = = "&")
- {
- $cstep = 5;
- $length + = 5;
- $i + = 4;
- $realnum + +;
- if ($magic)
- {
- $alen + +;
- }
- }
- else if (substr ($title, $i, 6) = = "" ")
- {
- $cstep = 6;
- $length + = 6;
- $i + = 5;
- $realnum + +;
- if ($magic)
- {
- $alen + +;
- }
- }
- else if (substr ($title, $i, 6) = = "'")
- {
- $cstep = 6;
- $length + = 6;
- $i + = 5;
- $realnum + +;
- if ($magic)
- {
- $alen + +;
- }
- }
- else if (Preg_match ("/&# (\d+);/i", substr ($title, $i, 8), $match))
- {
- $cstep = strlen ($match [0]);
- $length + = strlen ($match [0]);
- $i + = strlen ($match [0])-1;
- $realnum + +;
- if ($magic)
- {
- $blen + +;
- $ctype = 1;
- }
- }
- }else{
- if (Ord ($cur) >=128)
- {
- $cstep = 2;
- $length + = 2;
- $i + = 1;
- $realnum + +;
- if ($magic)
- {
- $blen + +;
- $ctype = 1;
- }
- }else{
- $cstep = 1;
- $length +=1;
- $realnum + +;
- if ($magic)
- {
- $alen + +;
- }
- }
- }
-
if ($magic)
- {
- if ($blen *2+ $alen) = = ($len)) break;
- if ($blen *2+ $alen) = = ($len *2+1))
- {
- if ($ctype = = 1)
- {
- $length-= $cstep;
- Break
- }else{
- Break
- }
- }
- }else{
- if ($realnum = = $len) break;
- }
- }
-
Unset ($cur);
- Unset ($alen);
- Unset ($blen);
- Unset ($realnum);
- Unset ($ctype);
- Unset ($cstep);
-
Return substr ($title, $start, $length);
- }
- ?>
Copy Code
Copy the above code, test it in your PHP platform, do more hands-on, and improve the level faster. The programmer's home, you learn the good friend on the road.
|