consigo texto UTF-8 desde una base de datos, y quiero mostrar sólo los primeros $ len caracteres (acabado en una palabra). He intentado varias opciones, pero la función aún no funciona debido a los caracteres especiales (á, é, í, ó, etc.).Cortar un texto UTF-8 en PHP
¡Gracias por la ayuda!
function text_limit($text, $len, $end='...')
{
mb_internal_encoding('UTF-8');
if((mb_strlen($text, 'UTF-8') > $len)) {
$text = mb_substr($text, 0, $len, 'UTF-8');
$text = mb_substr($text, 0, mb_strrpos($text," ", 'UTF-8'), 'UTF-8');
...
}
}
Editar a poner un ejemplo
Si trunco un texto con 65 caracteres, devuelve:
Un jardin de Estilo neoclásico acorde con el ...
Si cambio los caracteres especiales (í, á), entonces devuelve:
Un jardin de Estilo neoclasico con ACORDE El Palacio de ...
Estoy seguro de que hay algo extraño con la codificación o el servidor, o PHP; ¡pero no puedo entenderlo! ¡Gracias!
Solución Final
estoy usando esta todo UTF8 PHP library y trabaja ahora ...
Y si no usa text_limit, la codificación no genera problemas, ¿no? –
el texto se muestra sin ningún problema. El problema surge cuando lo corto, esos caracteres especiales ocupan varios bytes, por lo que text_limit() devuelve una cadena realmente corta. – fesja
posible duplicado de [Truncar una cadena multibyte a n caracteres] (http://stackoverflow.com/questions/2154220/truncate-a-multibyte-string-to-n-chars) – Gordon