1. /**
  2. * 截取HTML,并自动补全闭合
  3. * @param $html
  4. * @param $length
  5. * @param $end
  6. */
  7. function subHtml($html,$length,$charset) {
  8. $result = '';
  9. $tagStack = array();
  10. $len = 0;
  11. $contents = preg_split("~(<[^>]+?>)~si",$html, -1,PREG_SPLIT_NO_EMPTY| PREG_SPLIT_DELIM_CAPTURE);
  12.  
  13. foreach($contents as $tag)
  14. {
  15.  
  16. if (trim($tag)=="") continue;
  17.  
  18. if(preg_match("~<([a-z0-9]+)[^/>]*?/>~si",$tag)){
  19. $result .= $tag;
  20. }else if(preg_match("~</([a-z0-9]+)[^/>]*?>~si",$tag,$match)){
  21. if($tagStack[count($tagStack)-1] == $match[1]){
  22. array_pop($tagStack);
  23. $result .= $tag;
  24. }
  25. }else if(preg_match("~<([a-z0-9]+)[^/>]*?>~si",$tag,$match)){
  26. array_push($tagStack,$match[1]);
  27. $result .= $tag;
  28. }else if(preg_match("~<!--.*?-->~si",$tag)){
  29. $result .= $tag;
  30. }else{
  31. if($len + mstrlen($tag, $charset) < $length){
  32. $result .= $tag;
  33. $len += mstrlen($tag, $charset);
  34. }else {
  35. $str = msubstr($tag,0,$length-$len+1,'', $charset);
  36. $result .= $str;
  37. break;
  38. }
  39. }
  40. }
  41.  
  42. while(!empty($tagStack)){
  43. $result .= '</'.array_pop($tagStack).'>';
  44. }
  45.  
  46. return $result;
  47. }
  48.  
  49. /**
  50. * 取得字符串的长度,包括中英文。
  51. */
  52. function mstrlen($str,$charset = 'UTF-8'){
  53. if (function_exists('mb_substr')) {
  54. $length=mb_strlen($str,$charset);
  55. } elseif (function_exists('iconv_substr')) {
  56. $length=iconv_strlen($str,$charset);
  57. } else {
  58. 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);
  59. $length=count($ar[0]);
  60. }
  61. return $length;
  62. }
  63.  
  64. /**
  65. * 截取中文字符串
  66. * @param $string 字符串
  67. * @param $start 起始位
  68. * @param $length 长度
  69. * @param $charset&nbsp; 编码
  70. * @param $dot 附加字串
  71. */
  72. function msubstr($string, $start, $length,$dot='...',$charset = 'UTF-8') {
  73. $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;','&nbsp;'), array('&', '"', '<', '>',' '), $string);
  74. if(strlen($string) <= $length) {
  75. return $string;
  76. }
  77. if(strtolower($charset) == 'utf-8') {
  78. $n = $tn = $noc = 0;
  79. while($n < strlen($string)) {
  80. $t = ord($string[$n]);
  81. if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  82. $tn = 1; $n++;
  83. } elseif(194 <= $t && $t <= 223) {
  84. $tn = 2; $n += 2;
  85. } elseif(224 <= $t && $t <= 239) {
  86. $tn = 3; $n += 3;
  87. } elseif(240 <= $t && $t <= 247) {
  88. $tn = 4; $n += 4;
  89. } elseif(248 <= $t && $t <= 251) {
  90. $tn = 5; $n += 5;
  91. } elseif($t == 252 || $t == 253) {
  92. $tn = 6; $n += 6;
  93. } else {
  94. $n++;
  95. }
  96. $noc++;
  97. if($noc >= $length) {
  98. break;
  99. }
  100. }
  101. if($noc > $length) {
  102. $n -= $tn;
  103. }
  104. $strcut = substr($string, 0, $n);
  105. } else {
  106. for($i = 0; $i < $length; $i++) {
  107. $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  108. }
  109. }
  110. return $strcut.$dot;
  111. }

php汉字截取的更多相关文章

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

    <?php/*Utf-8.gb2312都支持的汉字截取函数cut_str(字符串, 截取长度, 开始长度, 编码);编码默认为 utf-8开始长度默认为 0*/ function cut_str ...

  2. PHP中汉字截取

    $len = 19; $text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?"; echo strlen($text)<=$len ? $text ...

  3. php中文汉字截取函数

    public function substrgb($in,$num) { //$num=16; $pos=0; $bytenum=0; $out=""; while($num){ ...

  4. 从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)

    function GetNBytesChar(s: Ansistring; n: Integer): string;var  aStr: AnsiString;  bStr: WideString;b ...

  5. ***PHP各种编码的汉字字符串截取

    虽然PHP有现成的截取字符串函数substr(),但是这个函数不能对汉字字符串进行截取,要实现这种效果还需要我们自己去编写相应的函数.汉字有多种编码,比如GB2312,UTF-8等,汉字字符串的截取需 ...

  6. php截取字符串

    1.substr(源字符串,其实位置[,长度])-截取字符串返回部分字符串 <?php $str ="phpddt.com"; echo substr($str, 2); / ...

  7. (实用篇)多个PHP中文字符串截取函数

    字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了 <?php funct ...

  8. php字符串截取问题

    希望将一个字符串限长显示,如果该字符串超过一定长数,就截取前n个字符,后加省略号. 但是在英文和汉字混合的情况下会出现如下问题: 如果有这样一个字符串  $str="这是一个字符串" ...

  9. PHP 截取字符串专题

    1. 截取GB2312中文字符串 < ?php//截取中文字符串function mysubstr($str, $start, $len) {    $tmpstr = "" ...

随机推荐

  1. ranlib的作用 -----更新静态库的符号索引表

    摘自 http://blog.csdn.net/jubincn/article/details/6958840 更新静态库的符号索引表 本小节的内容相对简单.前边提到过,静态库文件需要使用“ar”来创 ...

  2. Swift主题色顶级解决方案

    一.常规主题色使用点 应用在发布前都会对主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1. TabBar部分,设置图片高亮.文本高度颜色2. Navigatio ...

  3. uva 748 Exponentiation 浮点数乘方运算 高精度水题

    输入的前六位数表示一个小数,然后输入一个数表示几次方.要求用高精度算出结果. 高精度水题,主要注意处理小数点,先在输入时把小数点提取出来并记录位置,用普通乘法计算出结果后由后向前计算位置添加小数点. ...

  4. 搭建MyBatis框架

    一.开发环境 1.JDK 1.6.0_22 2.MyEclipse 10.7.1 3.Oracle_10g_10.2.0.4 注:各软件版本不是必须的,正常任意版本都行,文件较大就不附上下载地址了,推 ...

  5. .net 链接ORACLE的安装包

    odp.net.ma

  6. SQL中数据类型转换

    CAST 和 CONVERT 将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相似的功能. 语法 使用 CAST: CAST ( expression AS data ...

  7. JS删除练习

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. Oracle的分页查询语句优化

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. (一)   分页查询格式: SELECT * FROM  ( SELECT A.*, ROWNUM RN  FROM (SELECT ...

  9. 内存泄漏工具VLD1.0_要点分析

    0X01 关闭FPO优化 // Frame pointer omission (FPO) optimization should be turned off for this // entire fi ...

  10. C++中数字与字符串之间的转换,别人的,

    C++中数字与字符串之间的转换   1.字符串数字之间的转换 (1)string --> char *   string str("OK");   char * p = st ...