最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php截取html字符串及自動(dòng)補(bǔ)全html標(biāo)簽的方法

 更新時(shí)間:2015年01月15日 14:39:29   投稿:shichen2014  
這篇文章主要介紹了php截取html字符串及自動(dòng)補(bǔ)全html標(biāo)簽的方法,是php對(duì)html操作非常實(shí)用的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了php截取html字符串及自動(dòng)補(bǔ)全html標(biāo)簽的方法。分享給大家供大家參考。具體分析如下:

這里總結(jié)一下關(guān)于利用php截取html字符串自動(dòng)補(bǔ)全html標(biāo)簽,實(shí)際開(kāi)發(fā)中會(huì)經(jīng)常碰到,很多人直接先strip_tags過(guò)濾掉html標(biāo)簽,但是就只剩下純文本了,可讀性非常差,下面是一個(gè)函數(shù),代碼如下:

復(fù)制代碼 代碼如下:
/**
 * 截取HTML,并自動(dòng)補(bǔ)全閉合
 * @param $html
 * @param $length
 * @param $end
 */
function subHtml($html,$length) {
 $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)=="")&nbsp; 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) < $length){
 $result .= $tag;
 $len += mstrlen($tag); 
 }else {
 $str = msubstr($tag,0,$length-$len+1);
 $result .= $str;
 break;
 }
 
 }
 }
 while(!emptyempty($tagStack)){
 $result .= '</'.array_pop($tagStack).'>';
 }
 return&nbsp; $result;
}
 
/**
 * 截取中文字符串
 * @param $string 字符串
 * @param $start 起始位
 * @param $length 長(zhǎng)度
 * @param $charset&nbsp; 編碼
 * @param $dot 附加字串
 */
function msubstr($string, $start, $length,$dot='',$charset = 'UTF-8') {
 $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;','&nbsp;'), 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;
}
 
/**
 * 取得字符串的長(zhǎng)度,包括中英文。
 */
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);&nbsp; 
 $length=count($ar[0]);
 }
 return $length;
}

實(shí)例,代碼如下:
復(fù)制代碼 代碼如下:
* @param 要截取的HTML $str
* @param 截取的數(shù)量 $num
* @param 是否需要加上更多 $more
* @return 截取串
*/
function phpos_chsubstr_ahtml($str,$num,$more=false)
{
    $leng=strlen($str);
      if($num>=$leng)
      return $str;
    $word=0;
    $i=0;                        /** 字符串指針 **/
    $stag=array(array());        /** 存放開(kāi)始HTML的標(biāo)志 **/
    $etag=array(array());        /** 存放結(jié)束HTML的標(biāo)志 **/
    $sp = 0;
    $ep = 0;
      while($word!=$num)
      {
          if(ord($str[$i])>128)
          {
            //$re.=substr($str,$i,3);
            $i+=3;
            $word++;
          }
          else if ($str[$i]=='<')
          {
              if ($str[$i+1] == '!')
              {
                $i++;
                  continue;
              }
 
              if ($str[$i+1]=='/')    
              {
                $ptag=&$etag ;
                $k=&$ep;
                $i+=2;
              }
              else                    
              {
                $ptag=&$stag;
                $i+=1;
                $k=&$sp;
              }
 
              for(;$i<$leng;$i++)        
              {
                  if ($str[$i] == ' ')
                  {
                    $ptag[$k] = implode('',$ptag[$k]);
                    $k++;
                      break;
                  }
                  if ($str[$i] != '>') 
                  {
                    $ptag[$k][]=$str[$i];
                      continue;
                  }
                  else                
                  {
                    $ptag[$k] = implode('',$ptag[$k]);
                    $k++;
                      break;
                  }
              }
            $i++;
              continue;
          }
          else
          {
            //$re.=substr($str,$i,1);
            $word++;
            $i++;
          }
      }
      foreach ($etag as $val)
      {
        $key1=array_search($val,$stag);
          if ($key1 !== false)          unset($stag[$key]);
      }
      foreach ($stag as $key => $val)
      {
          if (in_array($val,array('br','img'))) unset($stag[$key1]);
      }
    array_reverse($stag);
    $ends = '</'.implode('></',$stag).'>';
    $re = substr($str,0,$i).$ends;
      if($more)    $re.='...';
      return $re;
}

PHP截取字符串,生成文章摘要,我們?cè)趯?xiě)B(tài)LOG時(shí)經(jīng)常需要顯示文章前一部分,但是又怕不恰當(dāng)截?cái)嗥茐姆忾]標(biāo)簽以造成整個(gè)文檔結(jié)構(gòu)破壞,代碼如下:
復(fù)制代碼 代碼如下:
function text_zhaiyao($text,$length){ //文章摘要生成函數(shù)  $test:內(nèi)容 $length:摘要長(zhǎng)度
    global $Briefing_Length;
    mb_regex_encoding("UTF-8");
    if(mb_strlen($text) <= $length ) return $text;
    $Foremost = mb_substr($text, 0, $length);
    $re = "<(/?)
    (P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|
    BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)";
    $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i";
     
    $Stack = array(); $posStack = array();
     
    mb_ereg_search_init($Foremost, $re, 'i');
     
    while($pos = mb_ereg_search_pos()){
    $match = mb_ereg_search_getregs();
    /* [Child-matching Formulation]:
     
    $matche[1] : A "/" charactor indicating whether current "<...>" Friction is
    Closing Part
    $matche[2] : Element Name.
    $matche[3] : Right > of a "<...>" Friction
    */
    if($match[1]==""){
    $Elem = $match[2];
    if(mb_eregi($Single, $Elem) && $match[3] !=""){
    continue;
}

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php引用計(jì)數(shù)器進(jìn)行垃圾收集機(jī)制介紹

    php引用計(jì)數(shù)器進(jìn)行垃圾收集機(jī)制介紹

    每一種計(jì)算機(jī)語(yǔ)言都有自己的自動(dòng)垃圾回收機(jī)制,讓程序員不必過(guò)分關(guān)心程序內(nèi)存分配,php也不例外,但是在面向?qū)ο缶幊?OOP)編程中,有些對(duì)象需要顯式的銷毀;防止程序執(zhí)行內(nèi)存溢出
    2012-09-09
  • 使用php shell命令合并圖片的代碼

    使用php shell命令合并圖片的代碼

    php不僅僅可以用在web環(huán)境下喔,它也是一款很不錯(cuò)的shell呢,下面的代碼演示如果在shell中使用php合并圖片
    2011-06-06
  • php cookie名使用點(diǎn)號(hào)(句號(hào))會(huì)被轉(zhuǎn)換

    php cookie名使用點(diǎn)號(hào)(句號(hào))會(huì)被轉(zhuǎn)換

    php cookie名不能使用點(diǎn)號(hào)(句號(hào)),應(yīng)該說(shuō)可以使用點(diǎn)號(hào)的cookie名,但會(huì)被轉(zhuǎn)換,要知道為什么,祥看本文
    2014-10-10
  • php繪制圓形的方法

    php繪制圓形的方法

    這篇文章主要介紹了php繪制圓形的方法,詳細(xì)分析了php繪制圖形的基本步驟與繪制圓形的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-01-01
  • ThinkPHP6.0 重寫(xiě)URL去掉Index.php的解決方法

    ThinkPHP6.0 重寫(xiě)URL去掉Index.php的解決方法

    這篇文章主要介紹了ThinkPHP6.0 重寫(xiě)URL去掉Index.php的解決方法,解決問(wèn)題最好多看看官方給的文檔,但有時(shí)候也不能全看官網(wǎng)文檔,可以結(jié)合官網(wǎng)下面的討論區(qū),借鑒各個(gè)大佬們的回答去解決問(wèn)題
    2021-01-01
  • php遇到錯(cuò)誤Call to undefined function ImageCreate()解決方法

    php遇到錯(cuò)誤Call to undefined function ImageCreate()解決方法

    剛配置好服務(wù)器,運(yùn)行php的時(shí)候提示Call to undefined function imagecreate錯(cuò)誤,經(jīng)過(guò)百度發(fā)現(xiàn)是php不支持gd庫(kù),linux服務(wù)器需要重新make,windows下比較簡(jiǎn)單了,下面是具體的方法
    2021-09-09
  • PHP如何獲取命令行參數(shù)

    PHP如何獲取命令行參數(shù)

    這篇文章主要介紹了PHP如何獲取命令行參數(shù),幫助大家更好的理解和學(xué)習(xí)使用PHP,感興趣的朋友可以了解下
    2021-05-05
  • php實(shí)現(xiàn)有序數(shù)組打印或排序的方法【附Python、C及Go語(yǔ)言實(shí)現(xiàn)代碼】

    php實(shí)現(xiàn)有序數(shù)組打印或排序的方法【附Python、C及Go語(yǔ)言實(shí)現(xiàn)代碼】

    這篇文章主要介紹了php實(shí)現(xiàn)有序數(shù)組打印或排序的方法,涉及php針對(duì)數(shù)組的遍歷、判斷、構(gòu)造與合并等常用操作技巧,并附帶了Python、C及Go語(yǔ)言的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-11-11
  • PHP利用ChatGPT實(shí)現(xiàn)輕松創(chuàng)建用戶注冊(cè)頁(yè)面

    PHP利用ChatGPT實(shí)現(xiàn)輕松創(chuàng)建用戶注冊(cè)頁(yè)面

    ChatGPT?是?OpenAI?開(kāi)發(fā)的?GPT語(yǔ)言模型的變體,它是一種大型單向語(yǔ)言模型。本文就來(lái)利用ChatGPT創(chuàng)建簡(jiǎn)單的用戶注冊(cè)頁(yè)面,感興趣的可以了解一下
    2023-02-02
  • 淺談php調(diào)用python文件

    淺談php調(diào)用python文件

    這篇文章主要介紹了php調(diào)用python文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

台中县| 华坪县| 德江县| 商洛市| 宽城| 泾源县| 泰和县| 南川市| 岳阳县| 庆城县| 双江| 阳城县| 河南省| 新龙县| 东城区| 辽阳县| 建平县| 开鲁县| 太湖县| 涟水县| 高邮市| 金华市| 寿阳县| 大冶市| 富阳市| 承德县| 盐山县| 四平市| 杂多县| 噶尔县| 钦州市| 平度市| 鄂尔多斯市| 隆昌县| 华蓥市| 常山县| 泰兴市| 横峰县| 贡觉县| 桦川县| 咸宁市|