Cortar linha de caracteres com UTF8

  • Autor Autor satanson
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
satanson

satanson

Gamma
Verificado
Verificación en dos pasos activada
Usuário com poucas negociações! Use sempre o saldo do 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 edição:
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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 edição:
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'];}
 
Voltar
Topo