php字符串截取问题

前端之家收集整理的这篇文章主要介绍了php字符串截取问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP字符串截取问题感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!
我希望将一个字符串限长显示,如果该字符串超过一定长数,就截取前n个字符,后加省略号 但是在英文和汉字混合的情况下会出现如下问题:
如果有这样一个字符串 $str="这是一个字符串";
为了截取该串的前10个字符,使用
if(strlen($str)>10) $str=substr($str,10)."…";
那么,echo $str的输出应该是"这是一个字…"
假设 $str="这是1个字符串"; 这个串中包含了一个半角字符,同样执行:
if(strlen($str)>10) $str=substr($str,10);
由于原字符串$str的第10、11个字符构成了汉字“符”; 执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象。

请问这种问题如何解决?即要使过长字符串实现分割,又不能让它发生乱码?

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
<?PHP 
//村里有很多,这个是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,$length-4):$content=substr($content,$length-3); 
} 
return $content; 
} 
?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
 

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
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; 
}
/***   来自编程之家 jb51.cc(jb51.cc)   ***/
 

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
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,-2) . $tail : $result . $tail; 
}else{ 
$result = $str; 
} 
return $result; 
}
/***   来自编程之家 jb51.cc(jb51.cc)   ***/

以下是一些补充:
1. 截取GB2312中文字符串 代码如下:

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
<?PHP 
//截取中文字符串 
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,2); 
$i++; 
} else 
$tmpstr .= substr($str,1); 
} 
return $tmpstr; 
} 
?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/

2. 截取utf8编码的多字节字符串 代码如下:

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
<?PHP 
//截取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); 
} 
?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/

3. UTF-8、GB2312都支持的汉字截取函数 代码如下:

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
<?PHP 
/* 
Utf-8、gb2312都支持的汉字截取函数 
cut_str(字符串,截取长度,开始长度,编码); 
编码默认为 utf-8 
开始长度默认为 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],$sublen))."..."; 
return join('',$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,1))>129) 
{ 
$tmpstr.= substr($string,2); 
} 
else 
{ 
$tmpstr.= substr($string,1); 
} 
} 
if(ord(substr($string,1))>129) $i++; 
} 
if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; 
return $tmpstr; 
} 
}$str = "abcd需要截取的字符串"; 
echo cut_str($str,8,'gb2312'); 
?>
/***   来自编程之家 jb51.cc(jb51.cc)   ***/

4. BugFree 的字符截取函数 代码如下:

/**
* PHP字符串截取问题
*
* @param 
* @arrange 512-笔记网: www.512Pic.com
**/
<?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,3); 
$I = $I + 3; 
} 
elseif( ord($StringTMP) >=192 ) 
{ 
$StringTMP = substr($String,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,$Append); 
?> 
/***   来自编程之家 jb51.cc(jb51.cc)   ***/

猜你在找的PHP相关文章