2010-01-23 11 views

risposta

30

Perché si sta tagliando i vostri personaggi in mezzo.

Utilizzare mb_substr per codifiche di caratteri multibyte come UTF-8. substr conta solo byte mentre mb_substr conta i caratteri.

0

Proprio per estendere la Gurmbo è la risposta. L'uso di mb_substr risolverà il tuo problema, ma se i caratteri speciali arrivano alla fine quando inciampi, mostra ancora alcuni caratteri speciali. Quindi, quando ho fatto qualche ricerca, wordpress ha il metodo wp_html_excerpt per risolvere questo problema.

Il metodo wp_html_excerpt rimuove tali caratteri speciali dalla fine della riga.

Ecco lo source code da wordpress.

/** 
* Safely extracts not more than the first $count characters from html string. 
* 
* UTF-8, tags and entities safe prefix extraction. Entities inside will *NOT* 
* be counted as one character. For example & will be counted as 4, < as 
* 3, etc. 
* 
* @since 2.5.0 
* 
* @param string $str String to get the excerpt from. 
* @param int $count Maximum number of characters to take. 
* @param string $more Optional. What to append if $str needs to be trimmed. Defaults to empty string. 
* @return string The excerpt. 
*/ 
function wp_html_excerpt($str, $count, $more = null) { 
    if (null === $more) 
     $more = ''; 
    $str = wp_strip_all_tags($str, true); 
    $excerpt = mb_substr($str, 0, $count); 
    // remove part of an entity at the end 
    $excerpt = preg_replace('/&[^;\s]{0,6}$/', '', $excerpt); 
    if ($str != $excerpt) 
     $excerpt = trim($excerpt) . $more; 
    return $excerpt; 
} 
0

se si hanno problemi di codifica è possibile applicare anche la funzione html_entity_decode() che convertono tutte le entità HTML nei corrispondenti caratteri. Per esempio:

echo substr(html_entity_decode($string_to_cut), 0, 28) . "..."; 

Anche questo dovrebbe funzionare.

Problemi correlati