PHP 截取字符串函数整理(支持gb2312和utf-8)


Posted in PHP onFebruary 16, 2010

1、截取GB2312字符用的函数

PHP代码

<?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, $i, 2); 
$i++; 
} else 
$tmpstr .= substr($str, $i, 1); 
} 
return $tmpstr; 
} 
?>

2. 截取utf8编码的多字节字符串

PHP代码

<?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); 
} 
?>

3. UTF-8、GB2312都支持的汉字截取函数

PHP代码

<?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], $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需要截取的字符串"; 
echo cut_str($str, 8, 0, 'gb2312'); 
?>

4. BugFree 的字符截取函数

PHP代码

<?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 <wwccss@263.net> 
* @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 = "book.chinaz.com -- 站长书库、站长教程"; 
$Length = "18"; 
$Append = false; 
echo sysSubStr($String,$Length,$Append); 
?>
PHP 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
PHP邮件专题
Oct 09 PHP
php,ajax实现分页
Mar 27 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 #PHP
一步一步学习PHP(6) 面向对象
Feb 16 #PHP
一步一步学习PHP(5) 类和对象
Feb 16 #PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 #PHP
IP138 IP地址查询小偷实现代码
Feb 15 #PHP
PHP采集相关教程之一 CURL函数库
Feb 15 #PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 #PHP
You might like
第八节--访问方式
2006/11/16 PHP
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php实现的http请求封装示例
2016/11/08 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python 内置函数complex详解
2016/10/23 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python实现Zabbix-API监控
2018/09/17 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
精通CAD能手自荐书
2014/01/31 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
中学教代会开幕词
2016/03/04 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL