2011-11-23 65 views
2

如何在HTML dom中使用substr()?我想保留所有的html標籤,並縮短文本。在html dom中的php substr

$str = '<div><a href="http://www.weather.com">Today is a nice day</a></div>'; 
$part1 = preg_replace("/<a(.*?)>(.*?)<\/a>/i",substr('\\2', 0,10),$str).'...'; 
$part2 = preg_replace("/<a(.*?)>(.*?)<\/a>/i",'\\2',$str); 
echo str_replace($part2,$part1,$str);// nothing change 
// I need <div><a href="http://www.weather.com">Today is a...</a></div> 
+0

可能重複http://stackoverflow.com/questions/ 7159695/html-errors-truncating) – Yoshi

+0

@Yoshi:不是重複的 – rabudde

+0

@rabudde它怎麼不是重複的?它處理截斷文本節點而不會破壞html結構? – Yoshi

回答

0

這很可能是一個有點更強勁,但這應該做的伎倆:

$str = '<div><a href="http://www.weather.com">Today is a nice day</a></div>'; 
echo shortenLinks($str); 

function shorten($matches) { 
    $maxlen = 10; 
    $str = $matches[2]; 
    if (strlen($str) > $maxlen) { 
     return "<" . $matches[1] . ">" . substr($str, 0, $maxlen) . "...<"; 
    } else { 
     return $matches[0]; 
    } 
} 

function shortenLinks($str) { 
    $pattern = "/<(a\s+.*)>([^<]+)</"; 
    return preg_replace_callback($pattern, "shorten", $str); 
} 
[?截斷時HTML錯誤](的
+0

@回答了,解析錯誤:語法錯誤,意外的T_FUNCTION行'$ callback = function($ matches){' –

+0

您使用的是哪個版本的PHP? – regality

+0

將其更改爲使用舊版本,請再試一次。 – regality