background image

  
  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_开头的函数真是好用啊。
  
  具体代码我就不写出来了,因为是针对一个需求写的,没做成通用的形式。哪天我有
时间做成通用的再发布一下。