2012-12-09 54 views
0

如何削減字符串中UTF 8剪切字符串(UTF-8)(PHP)

我從網上搜索這個功能:

function cutString($str, $lenght = 100, $end = ' …', $charset = 'UTF-8', $token = '~') { 
    $str = strip_tags($str); 
    if (mb_strlen($str, $charset) >= $lenght) { 
     $wrap = wordwrap($str, $lenght, $token); 
     $str_cut = mb_substr($wrap, 0, mb_strpos($wrap, $token, 0, $charset), $charset); 
     return $str_cut .= $end; 
    } else { 
     return $str; 
    } 
} 

但這種功能的結果不是太好。因爲如果我們設置剪切200個字母,它將返回約110,但我需要約200.

+0

*小邊注:*您寫錯** **長錯了:) – Sherif

+0

至於你的問題,是你說你想提供少於200個字符,並且該函數應該返回**完全** 200個字符?因爲我不明白問題在哪裏。該功能完全符合您要求的功能。據我可以看到它正常工作。 – Sherif

回答

-1

我剛測試它,它工作正常。如果你運行它

echo cutString($mystring, 200); 

它從我給它的字符串返回201個字符。

-1

我認爲wordwrap()函數在這種情況下會出錯 手動剪切字符串。我使用這樣的功能(只需加「MB_」和$字符集的字符串函數):

function str_cut_end_by_word($s, $max_len, $trailer = "...") 
{ 
    if (strlen($s) <= $max_len) 
    return $s; 

    $s = trim($s); 
    $s = substr($s, 0, $max_len); 

    for ($i = strlen($s) - 1; $i >= 0; $i--) 
    { 
    if (in_array($s{$i}, array(" ", "\t", "\r", "\n"))) 
    { 
     return rtrim(substr($s, 0, $i)).$trailer; 
    } 
    } 

    return $s; 
}