php截取字符串
最近没事,找了几个关于使用php截取字符串的方法,我罗列了一下,看到的朋友可以继续补充,我写到了一个类里面:
code如下:
<?php
class Helper_String
{
/**
* 第一种截取字符串的方法
* @param [type] $content [description]
* @param string $length [description]
* @return [type] [description]
*/
static 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;
}
/**
* 第二种截取字符串的方法
* @param [type] $string [description]
* @param [type] $length [description]
* @param string $dot [description]
* @return [type] [description]
*/
static 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;
}
/**
* 第三种截取字符串的方法
* @param [type] $str [description]
* @param [type] $len [description]
* @param string $tail [description]
* @return [type] [description]
*/
static 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;
}
/**
* 第四种截取字符串的方法
* @param [type] $str [description]
* @param [type] $start [description]
* @param [type] $len [description]
* @return [type] [description]
*/
static function mysubstr($str, $start, $len="30") {
$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;
}
/**
* 第五种截取字符串的方法
* @param [type] $str [description]
* @param [type] $from [description]
* @param [type] $len [description]
* @return [type] [description]
*/
static function utf8Substr($str, $len=30, $from=0){
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
/**
* 第六种截取字符串的方法
* @param [type] $string [description]
* @param [type] $sublen [description]
* @param integer $start [description]
* @param string $code [description]
* @return [type] [description]
*/
static 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;
}
}
/**
* 第七种截取字符串的方法
* @param [type] $String [description]
* @param [type] $Length [description]
* @param boolean $Append [description]
* @return [type] [description]
*/
static 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;
}
}
}
测试的结果总结如下
测试字符串
LIB内容个数200字内容个 数200字内容个数200字 内容个数200字内容个数200字内容个数200字内容 个数200字内容
截取字符串的长度为30
第一种方法的截取字符串的结果是:
LIB内容个数200字内容个 数200字内容个数200字 内容个数200字内容个数200字�
第二种方法的截取字符串的结果是:
LIB内容个数200字内容个 数200字内容个数200字 内容个数200字内容个数200字� ...
第三种方法的截取字符串的结果是:
LIB内容个数200字内容个 数200字内容个数200字 内容个数200字内容个数200字内�
第四种方法的截取字符串的结果是:
LIB内容个数200字内容个 数200字内容个数200字 内容个数200字内容个数200字内容个数200字内容 个数200�
第五种方法的截取字符串的结果是:(成功)
LIB内容个数200字内容个 数200字内容个数200字 内
第六种方法的街区字符串的结果是:(成功)
LIB内容个数200字内容个 数200字内容个数200字 内...
第七种方法的截取字符串的结果是:(成功)
LIB内容个数200字内容个
参考文章:http://www.jb51.net/article/4999.htm
版权声明
由 davidzhang创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。
本文永久链接: https://www.gowhich.com/blog/214
版权声明
由 davidzhang创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。
本文永久链接: https://www.gowhich.com/blog/214