child=>array{[0]=>一个文本节点对象,value 是 sdf}
attribute=array{”href”=>”#”}
…
..其他属性
可以看到,我们其实是可以单独去处理 a 标签对应节点下面的文字节点的值的,那
样就不会破坏任何 HTML 完整性。原来我以为改变 a 标签中文字节点的值之后,a 标签的
value 也会跟着改变,那样我直接返回 a 标签对应节点的 value 就 OK 了,没想到不是
那个样子,哎,所以处理过其中的文字之后还是要自己拼出新的 HTML。
知道了 Tidy 对象的结构之后,一切就好办了,只要遍历所有的节点,对于本需求来
说,就是找到那个 div 标签,然后开始处理里面的节点。代码如下:
if(mb_strwidth($subchild->value,‘utf-8 )>=$len)
′
{
$subchild->value=mb_strimwidth($subchild->value,0,$len,‘…’,‘utf-8 );
′
$trimed_str.=$subchild->value;
break;
}
else
{
$trimed_str.=$subchild->value;
$len=$len-mb_strwidth($subchild->value,‘utf-8 );
′
}
里面的$subchild 就是一个子节点。注意,这里使用了 mb_strwidth 来获取字符串
长度。严重推荐一下这个 mb_strwidth,很好用,它会把中文当作两个字符长度处理,
正好符合这里的需求!而且截取字符串的时候用到了 mb_strimwidth,这个函数也会把
中文当作两个字符长度处理,mb_开头的函数真是好用啊。
具体代码我就不写出来了,因为是针对一个需求写的,没做成通用的形式。哪天我有
时间做成通用的再发布一下。