既然是 做为文章摘要 那么img标签就可以不要了吧???

解决方案 »

  1.   

    正则可以解决。将img 做一个开始和结束标记
      

  2.   

    那就是先取前五百,然后再后后面有没有未封装的HTML标签,如果有,再往后取几位,把标签封闭了。
      

  3.   

    我做的BLOG中程序也要这种功能,请哪位仁兄请指一二!如果有答案了最好也告诉我一下
      

  4.   

    I wanna know how you deal with the other html tags like table....
      

  5.   

    问题是不光是图片啊<img 还有<table啊,<div之类的,还有好多意想不到的东东呢
      

  6.   

    我会把table div tr td不需要的标签全部去除 只留下内容
           /**
       * Works like PHP function strip_tags, but it only removes selected tags.
       * Example:
       *    strip_selected_tags('<b>Person:</b> <strong>Salavert</strong>', 'strong') => <b>Person:</b> Salavert
       */   function strip_selected_tags($text, $tags = array())
       {
           $args = func_get_args();
           $text = array_shift($args);
           $tags = func_num_args() > 2 ? array_diff($args,array($text))  : (array)$tags;
           foreach ($tags as $tag){
               if(preg_match_all('/<'.$tag.'[^>]*>(.*)<\/'.$tag.'>/iU', $text, $found)){
                   $text = str_replace($found[0],$found[1],$text);
             }
           }       return $text;
       }
      

  7.   

    对于含有html标记的文档(不仅只是img,可能还有其他的标记),需要使用不同于一般字符串截取的方法。<?php
    define("PREG_SPLIT_ALL", PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE);$text =<<< TEXT
    需要从一篇文章中截取前500个字符,做为文章摘要,怎样保证文章中的img标签不被截断?用正则能解决吗?<img src='1.gif'>需要从一篇文章中截取前500个字符,做为文章摘要,怎样保证文章中的img标签不被截断?用正则能解决吗?<img src='1.gif'>
    TEXT;$ar = preg_split("/(<\/?[a-z].*?>)/is", $text, -1, PREG_SPLIT_ALL);print_r($ar);
    ?>
    你可以看到,文档被分割成了数块
    Array
    (
        [0] => Array
            (
                [0] => 需要从一篇文章中截取前500个字符,做为文章摘要,怎样保证文章中的img标签不被截断?用正则能解决吗?
                [1] => 0
            )    [1] => Array
            (
                [0] => <img src='1.gif'>
                [1] => 96
            )    [2] => Array
            (
                [0] => 需要从一篇文章中截取前500个字符,做为文章摘要,怎样保证文章中的img标签不被截断?用正则能解决吗?
                [1] => 113
            )    [3] => Array
            (
                [0] => <img src='1.gif'>
                [1] => 209
            ))
    数组元素的第二维分别是匹配到的内容和该内容在原文档中的位置
    根据这些信息,你可以很方便的提取你需要的内容通常摘要文字的长度是不包括html标记的
      

  8.   

    这个很棒啊,要是想截取<table xxxxxxx ></table>这样的正则应该怎么写? 
    还有要是<img src="1   截取到这样的情况,应该怎么办?
      

  9.   

    foreach($ar as $v) {
      if($v[0][0] != '<') {
        if($num+strlen($v[0]) <= 500) {
          $num += strlen($v[0]);
        }else {
          $v[0] = substr($v[0], 0, 500-$num);
        } 
      }
      $out .= $v[0];
      if($num >= 500) break;
    }
    这里没有用到$v[1]
      

  10.   

    我会把table div tr td不需要的标签全部去除 只留下内容
    --------------------------then how about <input ...>??????
      

  11.   

    Getting the <img> src attribute in 500 bytes first
    then delete all html tags of the string in 1000 bytes(may be more or less) 
    get first 500 bytes of the sting
    add <img> tags anywhere you like.Hope it will be easier....
      

  12.   

    唠叨老大的这个方法我测试了一下,的确在一定程度上防止img被截断 先谢谢了
    $ar = preg_split("/(<\/?[a-z].*?>)/is", $text, -1, PREG_SPLIT_ALL);
    另外,我觉得流程这样效率会更高
    从文章中截取500个字符,将这500个字符处理下
    $ar = preg_split("/(<\/?[a-z].*?>)/is", $text, -1, PREG_SPLIT_ALL);
    直接foreach相连
    foreach($ar as $v) 
    {
      $out .= $v[0];
    }
      

  13.   

    似乎我的方法有些问题,解决不了img被截取的问题,唠叨老大的方法的确不错,可是对整个content完全使用正则太消耗效率,我再想想办法
    $text =<<< TEXT
    需要从一篇文章中截取前500个字符,做为文章摘要,怎样保证文章中的img标签不被截断?用正则能解决吗?<img src='1.gif'>需要从一篇文章中截取前500个字符,做为文章摘要,怎样保证文章中的img标签不被截断?用正则能解决吗?<img src='1.gif'>
    TEXT;$out = 0;
    $ar = preg_split("/(<\/?[a-z].*?>)/is", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
    foreach($ar as $key=>$val)
    { $out .= $val;

    }echo($out);
      

  14.   

    问题是复杂的,有些标记还要补结束标记,否则显示时会扰乱页面,如: <!-- 注释标记
     table  tr td ... 表格标记
     pre
     select option
     script
     ...如果周全,很多标记要特别考虑呀,偶做过这个,烦死了
      

  15.   

    如果有TABLE td 什么的数据被截,使表格不完整,那整个页面就不能看了。慎之。至少要处理一下table
      

  16.   

    TABLE的问题我看SINA的BLOG是这样处理的,在编辑器里你可在添上源码,但是在点击回普通显示界面的时候,自动补上没有完成的TABLE。还有大家知道新浪BLOG发布文章的时候是什么机制吗?
      

  17.   

    个人观点:首先要理解什么是“摘要”,摘要并不是指文章的前多少个字,而是文章的,摘要。所以不从技术角度来看,截取前500个字是不可取的。见过一些完善的系统都是专门有字段来存储摘要内容的,建议楼主采纳这种方式。其次,摘要摘的是内容,不是格式,所以你将表示格式的HTML代码去掉后根本不存在<IMG>标签的情况,所以也不会存在你提的问题。最后,没什么了。
      

  18.   

    楼上的,lz没说要去掉HTML---那是大家讨论过程说的
    lz说了,项目需求就是要求图文并茂的
      

  19.   

    见过一个asp可见编辑器的代码,里面就有sina blog类似的补全处理代码,挺不错的
      

  20.   

    sina blog类似的补全处理代码, 是由ie自动完成的,这个过程必须在客户端,而asp服务端无法直接这么用,所以是要自己编程的,我个人认为,可以把除了<font><span><div><b><i><p><img>等少数几个最没有麻烦的标记之外的所有标记都过滤掉,然后在第500个的位置回头找“<”和“>”,如果先找到">"那就正好不用再处理了,如果先找到"<"那就再往下找到第一个">"出现的位置,截取到这里就好。