2011-12-13 35 views
13

我的PHP代碼中有一些字符串需要被截斷,如果它們太長。如何截斷PHP中的UTF8字符串?

例如,如果一個文字是這樣的:

您好,我想告訴你多麼美妙,這是。

它將與此替換它:

您好,我想......

對於我做一個簡單的substr。問題在於,在UTF8中,一些字符實際上是兩個字符長。而且我在中間切斷了一個字符時遇到了一些問題:例如,當我嘗試將修改過的字符串插入到數據庫中時,它會崩潰。

這裏是我當前的功能:

static function short($string, $max = 255){ 
    if(strlen($string) >= $max){ 
     $string = substr($string, 0, $max - 5).'...'; 
    } return $string; 
} 

會有人知道一種方法,使這一功能工作,即使是UTF8字符?

+0

爲什麼'$最大 - 5'? – deceze

+0

看看'https://api.drupal.org/api/drupal/includes!unicode.inc/function/truncate_utf8/7' –

+0

[UTF-8 compatible truncate function](http:// stackoverflow .com/questions/6288875/utf-8-compatible-truncate-function) – user

回答

7

嘗試mb_substr()

static function short($string, $max = 255){ 
    if(mb_strlen($string, 'utf-8') >= $max){ 
     $string = mb_substr($string, 0, $max - 5, 'utf-8').'...'; 
    } return $string; 
} 
+0

-1爲什麼非多字節意識到'strlen'? – deceze

+0

@deceze - 你說得對,thx指出 - 我更正了複製/粘貼的代碼 –