如何从HTML标签中读取CDATA

时间:2012-01-01 08:12:36

标签: php html function

以下是php中的函数,它接受任何字符串(字符串也将包含html标签),并返回变量$ min中提到的几个单词。

function gen_string($string,$min=500,$clean=true) {

    $text = trim(strip_tags($string));

        if(strlen($text)>$min) {
            $blank = strpos($text,' ');
            if($blank) {
                # limit plus last word
                $extra = strpos(substr($text,$min),' ');
                $max = $min+$extra;
                $r = substr($text,0,$max);
                $query = "select distinct ID from cms_content";
                $result = mysql_query($query);
                $IDlink = 'http://localhost/www/index.php?ID='.$result;
                    if(strlen($text)>=$max && !$clean) $r=trim($r,'.') ;

            } else {
                # if there are no spaces
                $r = substr($text,0,$min).'.........';
            }

        } else {
            # if original length is lower than limit
            $r = $text;
        }
        return trim($r);
}

但问题是在返回的字符串中,它不会读取html标记。 那么如何使这个函数读取html标签,以便返回的字符串必须在格式化的html标签中?

2 个答案:

答案 0 :(得分:0)

你的问题是:

$text = trim(strip_tags($string));

strip_tags将删除所有标记,以便该函数不可能返回任何标记。

由于您要删除部分字符串,因此最终会出现无效的HTML代码段。您需要tidyHTMLPurifier来解决此问题。

答案 1 :(得分:0)

使用tidy构建有效的(x)html字符串,将其解析为DOM document,然后使用XPath(未经测试的)//body//text()

我已经向您指出了正确的函数/类方法,因此您可以开始运行。

文档和用户说明对您特别有用。

POC:

 1  <?php
 2  $string = '<p>Hello <b>World <i>out</i><span>there</span></b></p>';
 3  
 4  $string = tidy_repair_string($string);
 5  
 6  $doc = new DOMDocument;
 7  $doc->loadHTML($string);
 8  
 9  $path = new DOMXPath($doc);
10  
11  $entries = $path->query('//body//text()');
12  
13  $string = NULL;
14  
15  foreach($entries as $entry) {
16      if(preg_match('/\w/', $entry->nodeValue)) {
17          $string .= $entry->nodeValue;
18      }
19  }
20  echo $string;

输出:Hello World outthere