Foros del Web » Programando para Internet » PHP »

Contar caracteres

Estas en el tema de Contar caracteres en el foro de PHP en Foros del Web. Hola a todos, me acabo de encontrar con un problema usando estas funciones: str_len('teléfono'); => 8 str_len('telefono'); => 9 mb_strlen('teléfono'); => 8 mb_strlen('telefono'); => 9 ...
  #1 (permalink)  
Antiguo 06/05/2014, 03:25
 
Fecha de Ingreso: julio-2012
Ubicación: Ripollet
Mensajes: 80
Antigüedad: 11 años, 9 meses
Puntos: 1
Contar caracteres

Hola a todos, me acabo de encontrar con un problema usando estas funciones:

str_len('teléfono'); => 8
str_len('telefono'); => 9
mb_strlen('teléfono'); => 8
mb_strlen('telefono'); => 9

Como puedo saber el número de caracteres tengan o no acentos ???

Gracias
  #2 (permalink)  
Antiguo 06/05/2014, 04:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar caracteres

Estas seguro que el resultado es ese, que la palabra con el acento de un carácter de mas podría ser por algún lío de codificación, pero que lo haga la que no tiene acento lo veo mas extraño.

Teléfono o telefono a ojo humano tiene 8 caracteres
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 06/05/2014, 04:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Contar caracteres

Manual de referencia - Nota 1:
Cita:
strlen() devuelve el número de bytes en lugar del número de caracteres de un string.
No es lo mismo un byte que un caracter.
Cita:
mb_strlen:
Devuelve el número de caracteres del string str, teniendo éste una codificación de caracteres dada por encoding. Un carácter multibyte cuenta como 1.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 06/05/2014, 04:55
 
Fecha de Ingreso: julio-2012
Ubicación: Ripollet
Mensajes: 80
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Contar caracteres

Gracias por las 2 respuestas pero mantengo mi pregunta:

Como hago para obtener en ambos casos el mismo número ???

Que debo usar o cambiar o tener en cuenta que evidentemente aún no lo se ???

Gracias
__________________
Kike
  #5 (permalink)  
Antiguo 06/05/2014, 05:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar caracteres

Cita:
Teléfono o telefono a ojo humano tiene 8 caracteres
Depende de lo que quieras contar bytes o caracteres

Insisto que el ejemplo que pones no es correcto puesto que el único caracter multibyte es la é acentuada.

Luego debería ser

strlen('teléfono'); => 9
strlen('telefono'); => 8

y con el encoding correcto

mb_strlen('teléfono'); => 8
mb_strlen('telefono'); => 8
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/05/2014 a las 05:50
  #6 (permalink)  
Antiguo 06/05/2014, 05:52
 
Fecha de Ingreso: julio-2012
Ubicación: Ripollet
Mensajes: 80
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Contar caracteres

Efectivamente me lié con los valores:

var_dump(strlen('Teléfono')); => 9
var_dump(strlen('Telefono')); => 8

Para mi los dos deberían darme 8 pero todo lo que lleva acento me suma uno y me desvirtúa la alineación entre otras cosas, necesito una función o un sistema que me diga que ambos tienen 8 caracteres, lleve acento o no lo lleve.

Muchas gracias
__________________
Kike
  #7 (permalink)  
Antiguo 06/05/2014, 06:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Contar caracteres

Cita:
y con el encoding correcto

mb_strlen('teléfono'); => 8
mb_strlen('telefono'); => 8
Cita:
mb_strlen:
Devuelve el número de caracteres del string str, teniendo éste una codificación de caracteres dada por encoding. Un carácter multibyte cuenta como 1.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: caracteres
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:41.