Cortar linea de caracteres con UTF8

  • Autor Autor satanson
  • Fecha de inicio Fecha de inicio
satanson

satanson

Gamma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos tengo un problemilla con UTF-8, tengo estas 2 lineas de codigo:
PHP:
if(strlen($fila['Titulo']) > 40){ $titulo = mb_substr( $fila['Titulo'], 0, 40 ).'...';}else{$titulo=$fila['Titulo'];}
                if(strlen($fila['Titulo']) > 40){ $titulo = mb_substr( $fila['Titulo'], 0, 40, "UTF-8").'...';}else{$titulo=$fila['Titulo'];}
Como pueden ver estoy acortando el titulo que si es mas largo que 40 solo muestre 40, pero si al acortalo hay una ñ o alguna palabra con asento se daña la codificación y aparece como en la imagen -> https://prnt.sc/ULtldn3u_8lQ y solo aparece cuando si la letra esta al final de la linea y tengo el meta tag de UTF-8 en el head. Alguna recomendacion?
 
Última edición:
Supongo que lo tienes en modo entidades HTML en la base de datos (&ntilde, &acute, etc.), lo normal no suele ser eso, pero lo que puedes hacer es revertir eso:


Luego con eso las ñ y letras tildadas se convertirán en un solo caracter. Si tu página tiene configurado que está en utf8 (en las etiquetas meta), deberías poder imprimirlos tal cual, pero si luego de eso necesitas revertirlo otra ves, puedes hacerlo con htmlentites:


Si los títulos tienen caracteres tipo "<" o ">" mejor usa htmlentities o el navegador los entenderá como código html.

kj
 
Supongo que lo tienes en modo entidades HTML en la base de datos (&ntilde, &acute, etc.), lo normal no suele ser eso, pero lo que puedes hacer es revertir eso:


Luego con eso las ñ y letras tildadas se convertirán en un solo caracter. Si tu página tiene configurado que está en utf8 (en las etiquetas meta), deberías poder imprimirlos tal cual, pero si luego de eso necesitas revertirlo otra ves, puedes hacerlo con htmlentites:


Si los títulos tienen caracteres tipo "<" o ">" mejor usa htmlentities o el navegador los entenderá como código html.
No se, tu Multipaste es que lo guarda asi. xD. el problema solo es cuando hace el subtrato para acortar el titulo. si la letra queda al final pasa eso, en otro lugar no.
 
No se, tu Multipaste es que lo guarda asi. xD. el problema solo es cuando hace el subtrato para acortar el titulo. si la letra queda al final pasa eso, en otro lugar no.

Ya, es lo que ha heredado por haber sido hecho hace 11 años, cuando aún solo existía html4 (ya les he mencionado esto junto con los planes de futuro en los correos de actualización).

Como te dije, la solución sería poner las letras primero en "normal" y ahí las recortas. Luego puedes volverlas entidades HTML nuevamente y ya se recortaría como quieres.

Si el cambio es solo visual, te diría que mejor lo hagas con css. El cortar las letras del título por cuestión visual igual es otra cosa que hemos heredado de los tiempos en los que no había HTML5 ni CSS3.

kj
 
Última edición:
Ya, es lo que ha heredado por haber sido hecho hace 11 años, cuando aún solo existía html4 (ya les he mencionado esto justo con los planes de futuro en los correos de actualización).

Como te dije, la solución sería poner las letras primero en "normal" y ahí las recortas. Luego puedes volverlas entidades HTML nuevamente y ya se recortaría como quieres.

Si el cambio es solo visual, te diría que mejor lo haga con css. El cortar las letras del título por cuestión visual igual es otra cosa que hemos heredado de los tiempos en los que no había HTML5 ni CSS3.

kj
Eres un master, esta arreglado.
PHP:
if(strlen($fila['Titulo']) > 40){ $titulo2 = html_entity_decode($fila['Titulo']); $titulo = mb_substr( $titulo2, 0, 40 ).'...';}else{$titulo=$fila['Titulo'];}
 
Atrás
Arriba