php中截取中文字符串的代码小结
2023-06-13 09:14:29 时间
字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了。
1.截取GB2312中文字符串
复制代码代码如下:
1.截取GB2312中文字符串
<?php
//截取中文字符串
functionmysubstr($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编码的多字节字符串
<?php
//截取utf8字符串
functionutf8Substr($str,$from,$len)
{
returnpreg_replace("#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,".$from."}".
"((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,".$len."}).*#s",
"$1",$str);
}
?>
3.UTF-8、GB2312都支持的汉字截取函数
<?php
/*
Utf-8、gb2312都支持的汉字截取函数
cut_str(字符串,截取长度,开始长度,编码);
编码默认为utf-8
开始长度默认为0
*/
functioncut_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)returnjoin("",array_slice($t_string[0],$start,$sublen))."...";
returnjoin("",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需要截取的字符串";
echocut_str($str,8,0,"gb2312");
?>
4.BugFree的字符截取函数
<?php
/**
*@packageBugFree
*@version$Id:FunctionsMain.inc.php,v1.322005/09/2411:38:37wwccssExp$
*
*
*Returnpartofastring(Enhancethefunctionsubstr())
*
*@authorChunshengWang<wwccss@263.net>
*@paramstring$Stringthestringtocut.
*@paramint$Lengththelengthofreturnedstring.
*@parambooble$Appendwhetherappend"...":false|true
*@returnstringthecuttedstring.
*/
functionsysSubStr($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="17test.info走在中国自动化测试的前沿";
$Length="18";
$Append=false;
echosysSubStr($String,$Length,$Append);
?>
相关文章
- PHP各环境下的伪静态配置,可直接用
- phpspreadsheet中文手册_php file_put_contents
- 前端网页、php与mysql数据库字符编码(解决中文等乱码问题详解数据库
- PHP实现将数组插入MySQL数据库(php数组插入mysql)
- PHP替代session的方法详解编程语言
- PHP专业连接MySQL:实现快速代码.(php连接mysql数据库代码)
- Linux重启PHP的命令操作指南(linux重启php命令)
- MySQL封装,PHP解决方案(php封装mysql)
- PHP轻松构建高效应用——Redis实战指南(redis使用php)
- 利用PHP实现MySQL数据库操作的简易指南(php实现mysql)
- 使用PHP编辑器轻松编写Linux平台代码(php编辑器linux)
- 解决PHP输出MSSQL数据中文乱码问题(php输出MSSQL乱码)
- PHP与MSSQL联手谱写新篇章(php大马 mssql)
- PHP通用分页类page.php[仿google分页]
- php中文字符入库或显示乱码问题的解决方法
- 创建数据库php代码用PHP写出自己的BLOG系统