PHP截取HTML代码串

  • 来源: 未知 作者: 老苏   2011-07-18/10:22
  • 截取的时间是要截取div标签内部的工具,并且要保存HTML标签,只是对此中的笔墨做处置。好比我大概只是截取到“李四”的“李”字,然则若是就如许放到前真个话,“李四”前里的a标签是出有闭开的,所以截取以后要包管HTML的语法准确。

    $trimed_str.=$subchild->value;

    那个时间你可以用var_dump看一些$body的构造,会收现它把每一个标签都酿成了一个对应的对象,里里有响应的属性。举例来讲,PHP截取HTML代码串好比<ahref=”#”>sdf</a>,那么一条语句对应的一些属性有:

    可以看到,我们真正在是可以零丁往处置a标签对应节点下里的笔墨节点的值的,那样就不会粉碎任何HTML完备性。本来我觉得改动a标签中笔墨节点的值以后,a标签的value也会随着改动,那样我直接返回a标签对应节点的value就OK了,出想到不是阿谁模样,哎,所以处置过此中的笔墨以后仍是要本人拼出新的HTML。

    else

    $body=tidy_get_body($tidy);

    需求:将一段笔墨截取必定的物理长度隐现,注重,要截取的不是字符串的字节数,UFT-8的编码中笔墨符是3个字节或4个字节的,而隐现的时间中文会占两个字符的长度,英笔墨符只占一个,全角的时间又有差别。并且给的数据是HTML代码串,好比如许:

    }

    attribute=array{”href”=>”#”}

    child=>array{[0]=>一个文本节点对象,value是sdf}

    name=>”a”

    <divclass=”aaa”><ahref=”/aaa.php?id=1″>张三</a>评论了<ahref=”/aaa.php?id=444″>李四</a>分享的<ahref=”bbb.html”>一篇文章文章一长串的工具</a></div>

    $tidy=tidy_parse_string($str,array(),‘utf8′);//最后一个是设置编码的,注重,那里是utf8,不是utf-8,出有中心阿谁连线。

    {

    value=>“<ahref=”#”>sdf</a>”

    if(mb_strwidth($subchild->value,‘utf-8′)>=$len)

    $len=$len-mb_strwidth($subchild->value,‘utf-8′);

    详细代码我就不写出来了,由于是针对一个需求写的,出做成通用的情势。哪天我有工夫做成通用的再收布一下。

    {

    里里的$subchild就是一个子节点。注重,那里利用了mb_strwidth来获得字符串长度。严重保举一下那个mb_strwidth,很好用,它会把中文看成两个字符长度处置,恰好契开那里的需求!并且截取字符串的时间用到了mb_strimwidth,那个函数也会把中文看成两个字符长度处置,mb_开首的函数真是好用啊。

    别的,惋惜FireFox不撑持text-overflow属性,否则也不消背景那末辛劳地往截断了。若是年夜家有更好的圆式,接待提出!不堪感开感动。

    知道了Tidy对象的构造以后,一切就好办了,只要遍历所有的节点,对本需求来讲,就是找到阿谁div标签,然后开端处置里里的节点。代码以下:

    …..其他属性

    $subchild->value=mb_strimwidth($subchild->value,0,$len,‘…’,‘utf-8′);

    break;

    WebjxCom提醒:需求:将一段笔墨截取必定的物理长度隐现,注重,要截取的不是字符串的字节数,UFT-8的编码中笔墨符是3个字节或4个字节的,而隐现的时间中文会占两个字符的长度,英笔墨符只占一个,全角的时间又有差别。

    然后获得$tidy中的body(由于转换以后$tidy会主动加上<head><body>等标签):

    $trimed_str.=$subchild->value;

    }

    遍历字符串的每个字符。设置一个标识表记标帜,碰着标签开端的标识表记标帜<就置为1,接下来的字符都不记数,然后碰着>以后再开端计数。对标签内部的字符串处置的时间,还要先判定当前字符的编码是否是大概是中文,普通来讲PHP中UTF-8编码的中笔墨符的长度都是3,所以若是碰着是中笔墨符编码,就要跳过两个不记数……说到那里我本人头已开端年夜了。小我以为那类圆式很不爽,起尾那类精好的逻辑不太轻易控造,并且UFT-8编码下中文收生的长度有大概是3个或4个所以代码的周稀性值得思疑。

    我小我的思绪是,用Tidy来弄(详细用法请看PHP脚册吧)。昨天研讨了一下阿谁Tidy,收现那个工具仍是挺好用的。起尾,把那个字符串转换成Tidy对象,如许:

    那个题目确切不太好弄,让我忧闷了两天。请注重,那只是一个字符串,只不中内容是HTML代码,是出有甚么DOM的。若是是正在前端处置就好办了,直接DOM获得,然后对里里的节点停止处置,最后把innerHTML之类的工具输出就弄定了。现正在可不可了,得换个思绪。同事的思绪是如许的:


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多