However, in the case of mixing English with Chinese characters, the following problems arise:
If there is such a string
$str = "This is a string";
To intercept the first 10 characters of the string, use the
if (strlen ($STR) >10) $str =substr ($STR, 10). " ...";
So, the echo $str output should be "This is a word ..."
Assume
$str = "This is 1 strings";
This string contains a half-width character that is also executed:
if (strlen ($STR) >10) $str =substr ($STR, 10);
Because the original string $str 10th, 11 characters constitute the Chinese character "character";
After the string division is executed, the Chinese character is divided into split, so that the intercepted string will find the garbled phenomenon.
How can i solve this problem? That is to make too long string to achieve segmentation, and can not let it happen garbled?
Copy Code code as follows:
<?php
There are many in the village, this is gb2312
function Substrs ($content, $length = ' 30 ')
{
if ($length && strlen ($content) > $length)
{
$num = 0;
For ($i =0 $i < $length-3; $i + +)
{
if (Ord ($content [$i]) >127)
{
$num + +;
}
}
$num%2==1? $content =substr ($content, 0, $length-4): $content =substr ($content, 0, $length-3);
}
return $content;
}
?>
Copy Code code as follows:
function Cutstr ($string, $length, $dot = ' ... ') {
$strcut = ';
for ($i = 0; $i < $length-strlen ($dot)-1; $i + +) {
$strcut. = Ord ($string [$i]) > 127? $string [$i]. $string [+ + $i]: $string [$i];
}
return $strcut. $dot;
}
Copy Code code as follows:
function Cuttitle ($str, $len, $tail = "") {
$length = strlen ($STR);
$lentail = strlen ($tail);
$result = "";
if ($length > $len) {
$len = $len-$lentail;
for ($i = 0; $i < $len; $i + +) {
if (Ord ($str [$i]) < 127) {
$result. = $str [$i];
}else{
$result. = $str [$i];
+ + $i;
$result. = $str [$i];
}
}
$result = strlen ($result) > $len? substr ($result, 0,-2). $tail: $result. $tail;
}else{
$result = $str;
}
return $result;
}
Here are some additions:
1. Intercept GB2312 Chinese string
The code is as follows:
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;
}
?>
2. Intercepts the UTF8 encoded multibyte strings
The code is as follows:
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. Chinese character interception function supported by UTF-8 and GB2312
The code is as follows:
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 ');
?>
4. Bugfree Character intercept function
The code is as follows:
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 ())
*
* @author Chunsheng Wang
* @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 = "www.baidu.com";
$Length = "18";
$Append = false;
Echo syssubstr ($String, $Length, $Append);
?>