php汉字截取
- /**
- * 截取HTML,并自动补全闭合
- * @param $html
- * @param $length
- * @param $end
- */
- function subHtml($html,$length,$charset) {
- $result = '';
- $tagStack = array();
- $len = 0;
- $contents = preg_split("~(<[^>]+?>)~si",$html, -1,PREG_SPLIT_NO_EMPTY| PREG_SPLIT_DELIM_CAPTURE);
- foreach($contents as $tag)
- {
- if (trim($tag)=="") continue;
- if(preg_match("~<([a-z0-9]+)[^/>]*?/>~si",$tag)){
- $result .= $tag;
- }else if(preg_match("~</([a-z0-9]+)[^/>]*?>~si",$tag,$match)){
- if($tagStack[count($tagStack)-1] == $match[1]){
- array_pop($tagStack);
- $result .= $tag;
- }
- }else if(preg_match("~<([a-z0-9]+)[^/>]*?>~si",$tag,$match)){
- array_push($tagStack,$match[1]);
- $result .= $tag;
- }else if(preg_match("~<!--.*?-->~si",$tag)){
- $result .= $tag;
- }else{
- if($len + mstrlen($tag, $charset) < $length){
- $result .= $tag;
- $len += mstrlen($tag, $charset);
- }else {
- $str = msubstr($tag,0,$length-$len+1,'', $charset);
- $result .= $str;
- break;
- }
- }
- }
- while(!empty($tagStack)){
- $result .= '</'.array_pop($tagStack).'>';
- }
- return $result;
- }
- /**
- * 取得字符串的长度,包括中英文。
- */
- function mstrlen($str,$charset = 'UTF-8'){
- if (function_exists('mb_substr')) {
- $length=mb_strlen($str,$charset);
- } elseif (function_exists('iconv_substr')) {
- $length=iconv_strlen($str,$charset);
- } else {
- preg_match_all("/[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]/", $text, $ar);
- $length=count($ar[0]);
- }
- return $length;
- }
- /**
- * 截取中文字符串
- * @param $string 字符串
- * @param $start 起始位
- * @param $length 长度
- * @param $charset 编码
- * @param $dot 附加字串
- */
- function msubstr($string, $start, $length,$dot='...',$charset = 'UTF-8') {
- $string = str_replace(array('&', '"', '<', '>',' '), array('&', '"', '<', '>',' '), $string);
- if(strlen($string) <= $length) {
- return $string;
- }
- if(strtolower($charset) == 'utf-8') {
- $n = $tn = $noc = 0;
- while($n < strlen($string)) {
- $t = ord($string[$n]);
- if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
- $tn = 1; $n++;
- } elseif(194 <= $t && $t <= 223) {
- $tn = 2; $n += 2;
- } elseif(224 <= $t && $t <= 239) {
- $tn = 3; $n += 3;
- } elseif(240 <= $t && $t <= 247) {
- $tn = 4; $n += 4;
- } elseif(248 <= $t && $t <= 251) {
- $tn = 5; $n += 5;
- } elseif($t == 252 || $t == 253) {
- $tn = 6; $n += 6;
- } else {
- $n++;
- }
- $noc++;
- if($noc >= $length) {
- break;
- }
- }
- if($noc > $length) {
- $n -= $tn;
- }
- $strcut = substr($string, 0, $n);
- } else {
- for($i = 0; $i < $length; $i++) {
- $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
- }
- }
- return $strcut.$dot;
- }
php汉字截取的更多相关文章
- UTF-8、GB2312都支持的汉字截取函数
<?php/*Utf-8.gb2312都支持的汉字截取函数cut_str(字符串, 截取长度, 开始长度, 编码);编码默认为 utf-8开始长度默认为 0*/ function cut_str ...
- PHP中汉字截取
$len = 19; $text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?"; echo strlen($text)<=$len ? $text ...
- php中文汉字截取函数
public function substrgb($in,$num) { //$num=16; $pos=0; $bytenum=0; $out=""; while($num){ ...
- 从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)
function GetNBytesChar(s: Ansistring; n: Integer): string;var aStr: AnsiString; bStr: WideString;b ...
- ***PHP各种编码的汉字字符串截取
虽然PHP有现成的截取字符串函数substr(),但是这个函数不能对汉字字符串进行截取,要实现这种效果还需要我们自己去编写相应的函数.汉字有多种编码,比如GB2312,UTF-8等,汉字字符串的截取需 ...
- php截取字符串
1.substr(源字符串,其实位置[,长度])-截取字符串返回部分字符串 <?php $str ="phpddt.com"; echo substr($str, 2); / ...
- (实用篇)多个PHP中文字符串截取函数
字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了 <?php funct ...
- php字符串截取问题
希望将一个字符串限长显示,如果该字符串超过一定长数,就截取前n个字符,后加省略号. 但是在英文和汉字混合的情况下会出现如下问题: 如果有这样一个字符串 $str="这是一个字符串" ...
- PHP 截取字符串专题
1. 截取GB2312中文字符串 < ?php//截取中文字符串function mysubstr($str, $start, $len) { $tmpstr = "" ...
随机推荐
- ranlib的作用 -----更新静态库的符号索引表
摘自 http://blog.csdn.net/jubincn/article/details/6958840 更新静态库的符号索引表 本小节的内容相对简单.前边提到过,静态库文件需要使用“ar”来创 ...
- Swift主题色顶级解决方案
一.常规主题色使用点 应用在发布前都会对主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1. TabBar部分,设置图片高亮.文本高度颜色2. Navigatio ...
- uva 748 Exponentiation 浮点数乘方运算 高精度水题
输入的前六位数表示一个小数,然后输入一个数表示几次方.要求用高精度算出结果. 高精度水题,主要注意处理小数点,先在输入时把小数点提取出来并记录位置,用普通乘法计算出结果后由后向前计算位置添加小数点. ...
- 搭建MyBatis框架
一.开发环境 1.JDK 1.6.0_22 2.MyEclipse 10.7.1 3.Oracle_10g_10.2.0.4 注:各软件版本不是必须的,正常任意版本都行,文件较大就不附上下载地址了,推 ...
- .net 链接ORACLE的安装包
odp.net.ma
- SQL中数据类型转换
CAST 和 CONVERT 将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相似的功能. 语法 使用 CAST: CAST ( expression AS data ...
- JS删除练习
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Oracle的分页查询语句优化
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. (一) 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT ...
- 内存泄漏工具VLD1.0_要点分析
0X01 关闭FPO优化 // Frame pointer omission (FPO) optimization should be turned off for this // entire fi ...
- C++中数字与字符串之间的转换,别人的,
C++中数字与字符串之间的转换 1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = st ...