有沒有辦法做到這一點,而不寫我自己的功能?切割文本而不破壞html標籤
例如:
$text = 'Test <span><a>something</a> something else</span>.';
$text = cutText($text, 2, null, 20, true);
//result: Test <span><a>something</a></span>
我需要這個功能堅不可摧
我的問題是類似 This thread 但我需要一個更好的解決方案。我想保持嵌套標籤不變。
到目前爲止,我的算法是:
function cutText($content, $max_words, $max_chars, $max_word_len, $html = false) {
$len = strlen($content);
$res = '';
$word_count = 0;
$word_started = false;
$current_word = '';
$current_word_len = 0;
if ($max_chars == null) {
$max_chars = $len;
}
$inHtml = false;
$openedTags = array();
for ($i = 0; $i<$max_chars;$i++) {
if ($content[$i] == '<' && $html) {
$inHtml = true;
}
if ($inHtml) {
$max_chars++;
}
if ($html && !$inHtml) {
if ($content[$i] != ' ' && !$word_started) {
$word_started = true;
$word_count++;
}
$current_word .= $content[$i];
$current_word_len++;
if ($current_word_len == $max_word_len) {
$current_word .= '- ';
}
if (($content[$i] == ' ') && $word_started) {
$word_started = false;
$res .= $current_word;
$current_word = '';
$current_word_len = 0;
if ($word_count == $max_words) {
return $res;
}
}
}
if ($content[$i] == '<' && $html) {
$inHtml = true;
}
}
return $res;
}
但是,當然,它不會工作。我想過要記住已打開的標籤並關閉它們,如果它們未關閉,但也許有更好的方法?
@Kaminari - 我已經把這個功能在一些測試,但仍不能保證它在所有可能的情況。 – Wh1T3h4Ck5 2011-04-09 02:11:10
問題是,我不想把言語減半。我需要從整個內容中製作一個簡潔的內容而不會破壞HTML – Kaminari 2011-04-09 18:26:15