But when English and Chinese characters are mixed, the following problems will occur:
If there is such a string
$str="This is a string";
In order to intercept the first 10 characters of the string characters, use
if(strlen($str)>10) $str=substr($str,10)."...";
Then, the output of echo $str should be "This is a word …"
Suppose
$str="This is a string";
This string contains a half-width character, the same execution:
if(strlen($str)> ;10) $str=substr($str,10);
Since the 10th and 11th characters of the original string $str constitute the Chinese character "character";
After performing string splitting, the Chinese character will be divided into one For two, the intercepted string will be garbled.
How to solve this problem? Even if you want to split an overly long string, you can't make it garbled?
Copy code The code is as follows:
//There are many in the village, this one is gb2312
function substrs($content,$length='30')
{
if($length && strlen($content)>$length)
{
$num=0;
$num++ ;
);
}
return $content;
}
?> 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];
🎜>
The code is 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;
}
以下是一些补充:
1. 截取GB2312中文字符串
代码如下:
复制代码 代码如下:
//截取中文字符串
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. 截取utf8编码的多字节字符串
代码如下:
复制代码 代码如下:
//截取utf8字符串
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',
'$1',$str);
}
?>
3. UTF-8、GB2312都支持的汉字截取函数
代码如下:
复制代码 代码如下:
/*
Chinese character interception function supported by Utf-8 and gb2312
cut_str(string, interception length, starting length, encoding);
encoding The default is utf-8
The 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 The string that needs to be intercepted";
echo cut_str($str, 8, 0, 'gb2312');
?>
4. BugFree's character interception function
The code is as follows:
Copy code The code is as follows:
/**
* @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);
?> ;
http://www.bkjia.com/PHPjc/317176.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/317176.htmlTechArticleBut when English and Chinese characters are mixed, the following problems will occur: If there is such a string $str=" This is a string"; To intercept the first 10 characters of the string, use if(strle...