1, UTF-8, GB2312 are supported by the Chinese character intercept function
Copy Code code as follows:
<?php
/*
Chinese character interception function supported by Utf-8 and gb2312
Cut_str (string, intercept length, start length, coding);
encoding defaults to Utf-8
Start length defaults to 0
*/
function Cut_str ($string, $sublen, $start = 0, $code = ' UTF-8 ')
{
if ($code = = ' UTF-8 ')
{
$pa = "/[\x01-\x7f]| [\XC2-\XDF] [\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]| [\xe1-\xef] [\X80-\XBF] [\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]| [\xf1-\xf7] [\X80-\XBF] [\X80-\XBF] [\x80-\xbf]/];
Preg_match_all ($pa, $string, $t _string);
if (count ($t _string[0])-$start > $sublen) return join (', Array_slice ($t _string[0], $start, $sublen)). " ...";
Return join (', Array_slice ($t _string[0], $start, $sublen));
}
Else
{
$start = $start *2;
$sublen = $sublen *2;
$strlen = strlen ($string);
$tmpstr = ';
for ($i =0; $i < $strlen; $i + +)
{
if ($i >= $start && $i < ($start + $sublen))
{
if (Ord (substr ($string, $i, 1)) >129)
{
$tmpstr. = substr ($string, $i, 2);
}
Else
{
$tmpstr. = substr ($string, $i, 1);
}
}
if (Ord (substr ($string, $i, 1)) >129) $i + +;
}
if (strlen ($TMPSTR) < $strlen) $tmpstr. = "...";
return $tmpstr;
}
}
$str = "ABCD need to intercept the string";
Echo Cut_str ($STR, 8, 0, ' gb2312 ');
?>
2. Intercept UTF8 encoded multibyte strings
Copy Code code as follows:
<?php
Intercepting UTF8 strings
function Utf8substr ($str, $from, $len)
{
Return Preg_replace (' #^: [\x00-\x7f]|[ \xc0-\xff][\x80-\xbf]+) {0, '. $from. '} '.
' ((?: [\x00-\x7f]| [\xc0-\xff] [\x80-\xbf]+) {0, '. $len. '}). * #s ',
' $ ', $str);
}
?>
3. Intercept GB2312 Chinese string
Copy Code code as follows:
<?php
Intercepting Chinese strings
function Mysubstr ($str, $start, $len) {
$tmpstr = "";
$strlen = $start + $len;
for ($i = 0; $i < $strlen; $i + +) {
if (Ord (substr ($str, $i, 1)) > 0xa0) {
$tmpstr. = substr ($str, $i, 2);
$i + +;
} else
$tmpstr. = substr ($str, $i, 1);
}
return $tmpstr;
}
?>
4, bugfree character intercept function
Copy Code code as follows:
<?php
/**
* @package Bugfree
* @version $Id: functionsmain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss EXP $
*
*
* Return part of a string (enhance the function substr ())
*
* @param string $String the string to cut.
* @param int $Length The Length of returned string.
* @param booble $Append whether Append "...": false|true
* @return String The cutted string.
*/
function Syssubstr ($String, $Length, $Append = False)
{
if (strlen ($String) < = $Length)
{
return $String;
}
Else
{
$I = 0;
while ($I < $Length)
{
$StringTMP = substr ($String, $I, 1);
if (Ord ($StringTMP) >=224)
{
$StringTMP = substr ($String, $I, 3);
$I = $I + 3;
}
ElseIf (Ord ($StringTMP) >=192)
{
$StringTMP = substr ($String, $I, 2);
$I = $I + 2;
}
Else
{
$I = $I + 1;
}
$StringLast [] = $StringTMP;
}
$StringLast = Implode ("", $StringLast);
if ($Append)
{
$StringLast. = "...";
}
return $StringLast;
}
}
$String = "http://www.jb51.net-simple, wonderful, universal";
$Length = "18";
$Append = false;
Echo syssubstr ($String, $Length, $Append);
?>
intercepting code in the DEDECMS
This is from the DEDECMS directly to take the code, we can slightly modify it.
Copy Code code as follows:
Chinese interception 2, single byte interception mode
If this is the content of the request, you must use this function
function Cn_substrr ($str, $slen, $STARTDD =0)
{
$str = Cn_substr (Stripslashes ($STR), $slen, $STARTDD);
Return addslashes ($STR);
}
Chinese interception 2, single byte interception mode
function Cn_substr ($str, $slen, $STARTDD =0)
{
Global $cfg _soft_lang;
if ($cfg _soft_lang== ' utf-8 ')
{
Return Cn_substr_utf8 ($str, $slen, $STARTDD);
}
$restr = ';
$c = ';
$str _len = strlen ($STR);
if ($str _len < $STARTDD + 1)
{
Return ";
}
if ($str _len < $STARTDD + $slen | | $slen ==0)
{
$slen = $str _len-$startdd;
}
$ENDDD = $STARTDD + $slen-1;
for ($i =0; $i < $str _len; $i + +)
{
if ($STARTDD ==0)
{
$restr. = $c;
}
else if ($i > $STARTDD)
{
$restr. = $c;
}
if (Ord ($str [$i]) >0x80)
{
if ($str _len> $i + 1)
{
$c = $str [$i]. $str [$i +1];
}
$i + +;
}
Else
{
$c = $str [$i];
}
if ($i >= $enddd)
{
if (strlen ($RESTR) +strlen ($c) > $slen)
{
Break
}
Else
{
$restr. = $c;
Break
}
}
}
return $restr;
}
Utf-8 Chinese interception, single byte interception mode
function Cn_substr_utf8 ($str, $length, $start =0)
{
if (strlen ($STR) < $start + 1)
{
Return ";
}
Preg_match_all ("/./su", $str, $ar);
$str = ';
$tstr = ';
In order to be compatible with mysql4.1, the following versions are consistent with the database varchar, where byte interception is used
For ($i =0 isset ($ar [0][$i]); $i + +)
{
if (strlen ($TSTR) < $start)
{
$tstr. = $ar [0][$i];
}
Else
{
if (strlen ($STR) < $length + strlen ($ar [0][$i])
{
$str. = $ar [0][$i];
}
Else
{
Break
}
}
}
return $str;
}
string Intercept code in PHPCMS:
Copy Code code as follows:
function Str_cut ($string, $length, $dot = ' ... ')
{
$strlen = strlen ($string);
if ($strlen <= $length) return $string;
$string = str_replace (Array (', ') & ', ', ', ', ', ', ', ', ', ', ', ', ', ', ' < ', ' > ', ', ', ' ... ', Array (', ' & ', ' "', '" , ' ', ' ', ' ', '-', ' < ', ' > ', ' • ', ' ... ', $string);
$strcut = ';
if (Strtolower (CHARSET) = = ' Utf-8 ')
{
$n = $tn = $noc = 0;
while ($n < $strlen)
{
$t = Ord ($string [$n]);
if ($t = = 9 | | $t = 10 | | (<= $t && $t <= 126)) {
$tn = 1; $n + +; $noc + +;
} elseif (194 <= $t && $t <= 223) {
$tn = 2; $n + 2; $noc + 2;
} elseif (224 <= $t && $t < 239) {
$tn = 3; $n + 3; $noc + 2;
ElseIf (<= $t && $t <= 247) {
$tn = 4; $n + 4; $noc + 2;
} elseif (248 <= $t && $t <= 251) {
$tn = 5; $n + 5; $noc + 2;
} elseif ($t = = 252 | | $t = = 253) {
$tn = 6; $n + 6; $noc + 2;
} else {
$n + +;
}
if ($noc >= $length) break;
}
if ($noc > $length) $n-= $tn;
$strcut = substr ($string, 0, $n);
}
Else
{
$dotlen = strlen ($dot);
$maxi = $length-$dotlen-1;
for ($i = 0; $i < $maxi; $i + +)
{
$strcut. = Ord ($string [$i]) > 127? $string [$i]. $string [+ + $i]: $string [$i];
}
}
$strcut = Str_replace (' & ', ' "'," ' ", ' < ', ' > '), Array (' & ', '" ', ', ', ', ' < ', ' > '), $strcut);
return $strcut. $dot;
}