2011-12-13 46 views
13

Tengo algunas cadenas en mi código PHP que necesitan ser truncadas si son demasiado largas.Cómo truncar una cadena UTF8 en PHP?

Por ejemplo, si un texto es algo como esto:

Hola, me gustaría explicar lo maravilloso que es esto.

Sería reemplazarlo con esto:

Hola, me gustaría ...

Por lo que he hecho un simple substr. El problema es que en UTF8 algunos personajes tienen en realidad dos caracteres. Y he tenido algunos problemas con un personaje cortado en el medio: por ejemplo, cuando trato de insertar la cadena modificada en la base de datos, se bloquea.

Aquí es mi función actual:

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

qué alguien conocer una manera de hacer este trabajo de la función, incluso para caracteres UTF8?

+0

Por qué '$ max - 5'? – deceze

+0

eche un vistazo a 'https: //api.drupal.org/api/drupal/includes! Unicode.inc/function/truncate_utf8/7' –

+0

posible duplicado de [UTF-8 función truncado compatible] (http: // stackoverflow .com/questions/6288875/utf-8-compatible-truncate-function) – user

Respuesta

7

tratan con 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 ¿Por qué 'strlen' no multibyte-aware? – deceze

+0

@deceze - tienes razón, gracias por señalar eso - corregí el código de copiado/pegado –