2013-09-16 68 views
0

我知道各種方法來截斷HTML字符串到一定的長度,包括/不包括作爲結果的一部分的HTML標籤和/或截斷,同時保留整個單詞和什麼。我的問題是,如果字符串包含特殊字符如–&如何用特殊字符截斷HTML?

我需要截斷一個字符串爲100個字符(或少一些,否則如果它會在特殊字符中間截斷)。現在我有一個函數:

$result= truncateIfNecessary(strip_tags($fullText), 100); //ignore HTML tags 

function truncateIfNecessary($string, $length) { 
    if(strlen($string) > $length) { 
     return substr($string, 0, $length).'...'; 
    } else { 
     return $string; 
    } 
} 

但如果字符串的是一樣的東西text text – text(在頁面上顯示爲:在–text text - text$length瀑布,它返回text text &nda...,顯示完全一樣的,當我需要它返回text text...

編輯:

(張貼的答案)

+3

它們轉換成字符,然後截斷,然後再轉換回HTML標籤。 – Pitchinnate

+2

http://php.net/manual/en/function.html-entity-decode.php – user2180613

+0

@Pitchinnate幾乎可以工作,但不是完全適用於所有html字符 - 例如:•沒有轉換 – WOUNDEDStevenJones

回答

0

我試圖

function truncateIfNecessary($string, $length) { 
    if(strlen($string) > $length) { 
     $string = html_entity_decode(strip_tags($string)); 
     $string = substr($string, 0, $length).'...'; 
     $string = htmlentities($string); 
     return $string; 
    } else { 
     return strip_tags($string); 
    } 
} 

,但由於某些原因錯過了一些–•。現在,我找到了解決方案http://alanwhipple.com/2011/05/25/php-truncate-string-preserving-html-tags-words/(鏈接在Shortening text tweet-like without cutting links inside)完美工作 - 處理htmltags,保留整個單詞(或不)和htmlentities。現在,它只是:

function truncateIfNecessary($string, $length) { 
    if(strlen($string) > $length) { 
     return truncateHtml($string, $length, "...", true, true); 
    } else { 
     return strip_tags($string); 
    } 
} 
0

我覺得你的問題將得到解決d通過將第一行代碼更改爲:

$result = strip_tags(truncateIfNecessary($fullText, 100)); 

這樣您首先調整長度並在此之後照顧HTML字符。

+0

這將工作,但我相信這會導致不正確的長度,因爲它會考慮標籤作爲長度的一部分。最終結果可能不會比100個字符短。 – WOUNDEDStevenJones

+0

@WOUNDEDStevenJones是的你是對的,在函數開始時解碼並在最後編碼將是我認爲更好的解決方案。 – SharpKnight

+0

我也嘗試過,它並沒有100%的效果,但它比我開始的時間要緊密得多。看到我編輯的問題。 – WOUNDEDStevenJones

0

使用wordwrap php函數。

是這樣的:

$result = wordwrap(strip_tags($fullText), 100, "...\n"); // Remove HTML and split 
$result = explode("\n", $result); 
$result = $result[0]; // Select the first group of 100 characters 
+1

這是否與html特殊字符有關...? – WOUNDEDStevenJones

+0

不,這個wordwrap函數只能使用空格char作爲分隔符從一個給定的字符串中提取X個字符(總是提取確切的單詞)。 –

+0

@WOUNDEDStevenJones其實,是的。語義上的HTML實體是單詞,所以你要麼將它們全部放入,要麼根本不放入。儘管應該對沒有空格的文本進行特殊處理。另外我建議使用'\ 0'而不是'\ n'。 – user

0
function _truncate($string,$lenMax = 100) { 

    $len = strlen($string); 
    if ($len > $lenMax - 1) { 
     $string = substr(strip_tags($string),0,$lenMax); 
     $string = substr($string,0,strrpos($string," ")).'...'; 
    } 

    return $string; 
}