文章截断使用主要是在列表页面时我没有写描述这样只能在文章中截取字符串了,但使用php 自带函数会导致div未结束,从而页面混乱了,那么要如何解决此问题呢?

博主写好一篇文章,博客后台一般会在搜索页面或者列表页面给出文章标题和截断了的的文章部分作为进一步阅读的入口。

Function: mb_substr( $str, $start, $length, $encoding )

$str,需要截断的字符串

$start,截断开始处

$length,长度(注意,这个跟mb_strimwidth不同,1就代表一个中文字符)

$encoding,编码,我设为 utf-8

例,截断文章标题,控制在15个文字,代码如下:

这样对于纯文本没问题,但是我的是中间有html标签的于是问题来了,怎样截断一篇文章,注意,这篇文章不仅仅是普通的字符串文本,而是包含了各种格式化标签和样式内容的文本,如果处理不当,这些闭合标签无法正常关闭,从而破坏整个文档流。

如果单纯是纯文本,下面这个函数差不多是够用的,代码如下:

/**

* 字符串截取,支持中文和其他编码

*

* @param string $str 需要转换的字符串

* @param string $start 开始位置

* @param string $length 截取长度

* @param string $charset 编码格式

* @param string $suffix 截断字符串后缀

* @return string

*/

functionsubstr_ext($str,$start=0,$length,$charset="utf-8",$suffix="")

{

if(function_exists("mb_substr")){

returnmb_substr($str,$start,$length,$charset).$suffix;

}

elseif(function_exists('iconv_substr')){

returniconv_substr($str,$start,$length,$charset).$suffix;

}

$re['utf-8']  ="/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";

$re['gb2312'] ="/[x01-x7f]|[xb0-xf7][xa0-xfe]/";

$re['gbk']    ="/[x01-x7f]|[x81-xfe][x40-xfe]/";

$re['big5']   ="/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";

preg_match_all($re[$charset],$str,$match);

$slice= join("",array_slice($match[0],$start,$length));

return$slice.$suffix;

}

但是,如果需要截断是网页中的某部分格式化文本,上面的函数就不够用了,它不具备处理格式化标签的能力。

这时,需要一个新函数,它应该是以上函数的升级加强版,它必须有能力正确的处理标签,下面找到一个

strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。

例子1,代码如下:

echostrip_tags("Hello world!");

?>

输出:Hello world!

这样就好做了我们只要在上面基础上如下操作,代码如下:

$a=strip_tags("Hello world!");

substr_ext( $a,10) ;

//但是发现html不见了这个也不是什么好的解决办法了。

?>

接着google 发现cns写了一个支持html截取字符串的函数,代码如下:

/**

* 获取字符在字符串中第N次出现的位置

* @param string $text 字符串

* @param string $key 字符

* @param int $int N

* @return int

*/

functionstrpos_int($text,$key,$int)

{

$keylen=strlen($key);

global$textlen;

if(!$textlen)

$textlen=strlen($text);

static$textpos= 0;

$pos=strpos($text,$key);

$int--;

if($pos)

{

if($int== 0)

$textpos+=$pos;

else

$textpos+=$pos+$keylen;

}

else

{

$int= 0;

$textpos=$textlen;

}

if($int> 0)

{

strpos_int(substr($text,$pos+$keylen),$key,$int);

}

return$textpos;

}

/**

* 截取HTML

* @param string $string  HTML 字符串

* @param int $length 截取的长度

* @param string $dot

* @param string $append

* @return string

*/

functioncuthtml($string,$length,$dot=' ...',$append="")

{

$str=strip_tags($string);//先过滤标签

$new_str= iconv_substr($str, 0,$length,'utf-8');

$last= iconv_substr($new_str, -1, 1,'utf-8');

$sc= substr_count($new_str,$last);

$position= strpos_int($string,$last,$sc);//获取截取真实的长度

if(function_exists('tidy_parse_string'))//服务器开启tidy的话 直接用函数不全html代码即可

{

$options=array("show-body-only"=> true);

returntidy_parse_string(mb_substr($string, 0,$position) .$dot.$append,$options,'UTF8');

} else//没有开启tidy

{

if(strlen($string) <=$position)

{

return$string;

}

$pre=chr(1);

$end=chr(1);

$string=str_replace(array('&','"',''),array($pre.'&'.$end,$pre.'"'.$end,$pre.''.$end),$string);

$strcut='';

$n=$tn=$noc= 0;

while($n

{

$t= ord($string[$n]);

if($t== 9 ||$t== 10 || (32 <=$t&&$t<= 126))

{

$tn= 1;

$n++;

$noc++;

} elseif(194 <=$t&&$t<= 223)

{

$tn= 2;

$n+= 2;

$noc+= 2;

} elseif(224 <=$t&&$t<= 239)

{

$tn= 3;

$n+= 3;

$noc+= 2;

} elseif(240 <=$t&&$t<= 247)

{

$tn= 4;

$n+= 4;

$noc+= 2;

} elseif(248 <=$t&&$t<= 251)

{

$tn= 5;

$n+= 5;

$noc+= 2;

} elseif($t== 252 ||$t== 253)

{

$tn= 6;

$n+= 6;

$noc+= 2;

} else

{

$n++;

}

if($noc>=$position)

{

break;

}

}

if($noc>$position)

{

$n-=$tn;

}

$strcut=substr($string, 0,$n);

$strcut=str_replace(array($pre.'&'.$end,$pre.'"'.$end,$pre.''.$end),array('&','"',''),$strcut);

$pos=strrpos($strcut,chr(1));

if($pos!== false)

{

$strcut=substr($strcut, 0,$pos);

}

return$strcut.$dot.$append;

}

}

(责任编辑:admin)

php 拼接html字符串,php截断带html字符串文章内容的方法相关推荐

  1. textbox内容转为字符串_【公告】整改文章内容

    hello我系钟小赫赫呀,今天我打开微信公众平台,发现在读者讨论里有这个内容: 文章内容有些错误:int()是将字符串或浮点数转换成整数(但末尾可能带有".0"):str()是将浮 ...

  2. 牛客题霸 [拼接所有的字符串产生字典序最小的字符串] C++题解/答案

    牛客题霸 [拼接所有的字符串产生字典序最小的字符串] C++题解/答案 题目描述 给定一个字符串的数组strs,请找到一种拼接顺序,使得所有的字符串拼接起来组成的字符串是所有可能性中字典序最小的,并返 ...

  3. js字符串如何拼接java代码_JS如何定义用字符串拼接的变量

    今天在写js的时候碰到了难题,我又一个页面需要生成很多的变量.但是变量的名称是根据参数的不同而区分的. 例如可能需要生成 date_1,date_2,datet_3... (后面的数字是根据参数来的) ...

  4. matlab字符衔接,matlab字符串连接(多个字符串)的经验,matlab字符串

    matlab字符串连接(多个字符串)的经验,matlab字符串 参考 matlab中字符串连接的3种方法  文章,实验遇到的一些小白问题,如有问题希望大神们给予指导. Matlab中,两个或多个字符串 ...

  5. python字符串解释_Python学习:字符串的简单解释,深入浅出

    字符串是python很常见的一种数据类型,比如日志的打印,程序中函数的注释,数据库的访问,变量的操作都需要用到字符串. 一.字符串基础 字符串是由独立字符组成的一个序列,通常包含在单引号('')双引号 ...

  6. 两种方法判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言)...

    例如:给定s1 = AABCD和s2 = BCDAA,返回1 给定s1 = abcd和s2 = ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 第一种: ...

  7. python规范化字符串_python中正确的字符串编码规范

    在Python中字符串是不可改变的对象(immutable),因此无法直接修改字符串的某一位字符.一种可行的方式,是将字符串转换为列表,修改列表的元素后,在重新连接为字符串. 示例代码如下:s = ' ...

  8. python rfind函数用法_Python语法速查:字符串格式简单处理、子串查找与判断方法?...

    这是一篇python基础知识分享型文章,对学习python感兴趣的朋友们可以仔细看看 字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属 ...

  9. python字符串输入_python如何输入字符串

    字符串是 Python 中最常用的数据类型.我们可以使用引号( ' 或 " )来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如:var1 = 'Hello World!' v ...

最新文章

  1. Android --- Gradle是什么?
  2. Oracle中用一个序列给两个表创建主键自增功能的后果
  3. 剑指 Offer 29. 顺时针打印矩阵
  4. mysql索引_效率测试(包含测试sql脚本300万条数据),可用作教学案例。
  5. on java 8学习笔记
  6. Android给TextView和EditText等控件设置透明背景、圆角边框
  7. 【计算机视觉】【车辆识别】--Matlab实现
  8. Glad You Came--带条件的线段树区间更新,区间查询(其实是单点查询)
  9. 最小二乘法系统辨识小结
  10. Abode Arcobat DC 解决IEEE会议论文审核字体未嵌入和打印PDF掉色问题
  11. java中的Date类,DataFormat类及Calendar类的使用详解
  12. 人力资源书籍排行榜,这些好书不容错过!
  13. 树莓派之安装Vulkan
  14. DSP28377s系统时钟配置注意事项
  15. iphone 图片等比例缩小
  16. CentOS Linux基本命令
  17. 4G双卡工业CPE及MIFI
  18. 一款轻量级的markdown编辑器
  19. 冈萨雷斯《数字图像处理》学习笔记(4)--图像复原与重建(含傅里叶切片定理推导)
  20. 赫兹Hertz重新上市:转道纳斯达克挂牌,租车行业重现光辉?

热门文章

  1. 常用工具 [ubuntu 图像编辑软件]
  2. 容错性低是什么意思_王者荣耀:在成为高手之前,这4位容错率低的千万别碰!...
  3. 如何保障银行日志安全合规审计
  4. 一次进入 Cisco Router(SDM)小记
  5. ubuntu下adb连接android手机调试
  6. 【转】在 26 岁时写给 18 岁的自己--Livid
  7. Android studio中todo的用法
  8. 电子书沦为“压泡面”神器,其实高端电子书就该从这两个里边选
  9. 空气净化器只是心理作用???
  10. 印象派绘画在现代艺术发展中的地位和作用