Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] error en tilde al usar substr()

Estas en el tema de error en tilde al usar substr() en el foro de PHP en Foros del Web. Hola a todos Tengo una pregunta corta relacionado con algo que me acaba de ocurrir... Tengo un texto traído de una clase, el texto en ...
  #1 (permalink)  
Antiguo 15/01/2014, 14:09
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
error en tilde al usar substr()

Hola a todos

Tengo una pregunta corta relacionado con algo que me acaba de ocurrir...

Tengo un texto traído de una clase, el texto en específico es "Camión" el cual se ve bien si lo imprimo tal cual, pero resulta que me ha tocado imprimirlo en un espacio muy pequeño así que de decidido cortar todas las palabras para que solo se vean las primeras 5 letras, para esto use un substr:

Código PHP:
echo substr($lang->trck("mod"),0,5); 
sin embargo me imprime lo siguiente:

Cami�

lo que me parece raro ya que se ve bien sin el substr, la página esta en UTF-8, la palabra viene de una BD en UTF-8 y cuando cuento los caracteres sin usar el substr me muestra 6, por lo que no es una entidad html.

Esta es parte de la cabecera:

Código HTML:
Ver original
  1. <?php header('Content-Type: text/html; charset=UTF-8'); ?>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Alguien ha tenido algún problema similar?
alguien tiene una idea de que pueda ser?
alguien conoce alguna solución?
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #2 (permalink)  
Antiguo 15/01/2014, 14:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error en tilde al usar substr()

Tienes que usar las funciones para multibyte, en tu caso sería mb_substr(), consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 15/01/2014, 14:30
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: error en tilde al usar substr()

gracias pero no funcionó

Código PHP:
Ver original
  1. echo mb_substr($lang->trck("mod"),0,5);
imprime Cami�

Por cierto cuando hago el substr (o mb_substr) con 6 caracteres imprime las 5 letras:
Código PHP:
Ver original
  1. echo mb_substr($lang->trck("mod"),0,6);
Imprime Camió

O sea es como si la ó fueran 2 carácteres que deben estar ambos para poder verse, si solo imprimo el primero sale "�"...

Podría dejarlo en 6 caracteres pero podría salirme en el futuro una palabra con tilde en la sexta letra (como pararán) y volvería a tener el mismo problema :(

alguna idea? quizás alguna forma de detectarlo
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 15/01/2014, 14:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error en tilde al usar substr()

Igual te hace falta detectar primero la codificación del texto y actuar en consecuencia, tal vez re/de-codificar en UTF-8, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 15/01/2014, 14:36
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: error en tilde al usar substr()

he intentado con algo más simple:

Código PHP:
Ver original
  1. echo mb_substr("óóó",0,3);
imprime: ó�

hice creo lo que me dices pateketrueke no se si sea la forma correcta pero sigue igual o.O

Código PHP:
Ver original
  1. echo mb_substr(utf8_encode(utf8_decode("óóó")),0,3);
imprime: ó�
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #6 (permalink)  
Antiguo 15/01/2014, 14:55
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: error en tilde al usar substr()

Te aconsejo leer siempre los comentarios que tiene una función en el manual de PHP ya que muchas se encuentran cosas interesantes. Por ejemplo

Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=UTF-8');
  3.  
  4. function substr_unicode($str, $s, $l = null) {
  5.     return join("", array_slice(
  6.         preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
  7. }
  8.  
  9. echo mb_substr("óóó", 0, 3);
  10. echo "<br>";
  11. echo mb_substr("óóó", 0, 3);
  12. echo "<br>";
  13. echo substr_unicode("óóó", 0, 3);

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 15/01/2014, 14:56
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: error en tilde al usar substr()

Este ejemplo que publicó un usuario en el manual de PHP, puede serte de mucha ayuda:

http://www.php.net/manual/es/functio...str.php#107698

Saludos
----------------------------------------------------------------------------
jonni09lo, te me adelantaste.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 15/01/2014, 15:02
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: error en tilde al usar substr()

excelente! muchas gracias

Me han salvado la vida! XD

A veces leo los comentarios, pero jamás pensé que fueran a poner algo así de exacto!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: html, tilde, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.