以下是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标签中?
答案 0 :(得分:0)
你的问题是:
$text = trim(strip_tags($string));
strip_tags
将删除所有标记,以便该函数不可能返回任何标记。
由于您要删除部分字符串,因此最终会出现无效的HTML代码段。您需要tidy
或HTMLPurifier
来解决此问题。
答案 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
。