2011-12-13 3 views
13

Ho alcune stringhe nel mio codice PHP che devono essere troncate se sono troppo lunghe.Come troncare una stringa UTF8 in PHP?

Per esempio, se un testo è qualcosa di simile:

Salve, vorrei dirvi quanto sia meraviglioso questo è.

Sarebbe sostituirlo con questo:

Salve, Vorrei ...

Per questo ho fatto una semplice substr. Il problema è che in UTF8 alcuni caratteri sono in realtà lunghi due caratteri. E ho avuto qualche problema con un personaggio tagliato nel mezzo: ad esempio, quando provo ad inserire la stringa modificata nel database, si blocca.

Qui è la mia funzione attuale:

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

qualcuno dovrebbe conoscere un modo per rendere questa funzione di lavoro anche per i caratteri UTF8?

+0

Perché '$ max - 5'? – deceze

+0

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

+0

possibile duplicato di [funzione troncata compatibile UTF-8] (http: // stackoverflow .com/questions/6288875/utf-8-compatible-truncate-function) – user

risposta

7

provare 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 Perché il 'strlen' non-multibyte-aware? – deceze

+0

@deceze - hai ragione, grazie per averlo indicato - ho corretto il codice copia/incollato –