Foros del Web » Programando para Internet » PHP »

Separar caracteres de un string con tildes

Estas en el tema de Separar caracteres de un string con tildes en el foro de PHP en Foros del Web. Hola me he topado con un problemita, estoy separando una cadena de la forma en la que se accede a sus caracteres como si fuese ...
  #1 (permalink)  
Antiguo 31/10/2012, 19:51
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Separar caracteres de un string con tildes

Hola me he topado con un problemita, estoy separando una cadena de la forma en la que se accede a sus caracteres como si fuese un array:

Código PHP:
$cadena "casa";

echo 
$cadena[0];
echo 
$cadena[1];
echo 
$cadena[2];
echo 
$cadena[3]; 
Esto imprimiría la palabra "casa" correctamente, el problema viene cuando hay una tilde

Código PHP:
$cadena "día";

echo 
$cadena[0];
echo 
$cadena[1];
echo 
$cadena[2]; 
Si lo prueban, se darán cuenta del problema.

Parece que cuando hay una tilde, php no lo trata como un solo caracter, sino mas de uno.
Ya probé con utf8_decode y encode y nada

Alguien sabe como hacer para lograr resolver esto?

Saludos
Gracias
__________________
la la la

Última edición por truman_truman; 31/10/2012 a las 20:07
  #2 (permalink)  
Antiguo 31/10/2012, 20:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Separar caracteres de un string con tildes

Creo que deberías probar con las funciones para cadenas multibyte (AKA mbstring), más específicamente, tratarlo como cadena y no como arreglo, accediendo a cada caracter con mb_substr() y, dependiendo de tu configuración de PHP + mbstring, tal vez debas especificar el juego de caracteres o definirlo usando mb_internal_encoding()
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 31/10/2012, 20:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Separar caracteres de un string con tildes

Vamos a verlo con calma.

En primer lugar al acceder a una cadena como array no estás leyendo carácter por carácter, en realidad lo hace byte por byte.

Al tratarse de ASCII es normal que una cadena sin acentos devuelva la misma cantidad de caracteres que bytes, pero no es así con cadenas multi byte.

Una cadena multi byte ocupa mas de un sólo byte por carácter, mira tu mismo ejemplo corregido.
Código PHP:
$cadena "día";

echo 
$cadena[0];
echo 
$cadena[1];
echo 
$cadena[2];  
echo 
$cadena[3]; 
Ahí si imprime "día" tal cual.

El punto inicial como siempre es, ¿y para qué estás tratando de hacer las cosas así?

Si es por ocio mejor olvida lo que te voy a decir, pero en caso contrario puedes usar funciones multi byte.

http://www.php.net/manual/en/book.mbstring.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 01/11/2012, 05:26
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Separar caracteres de un string con tildes

Gracias a los dos Triby and pateketrueke, excelente respuesta.
Esto de los bytes es algo que tengo pendiente por aprender.
Un saludo Grande.
__________________
la la la

Última edición por truman_truman; 02/11/2012 a las 04:45

Etiquetas: caracteres, string, tildes
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 20:29.