Ver Mensaje Individual
  #9 (permalink)  
Antiguo 17/07/2013, 19:24
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problemas con acentos,ñ, tildes etc, letra por letra ...

Cita:
Iniciado por Dave_27 Ver Mensaje
.. espero haberme explicado y que me puedan ayudar para saber como lograr que aparezca la letra "é" como debería de ser, otro dato importante es que si agrego cualquier otra letra con acento o ñ, pasa exactamente lo mismo y si utilizo el utf8-encode la letra me la pone con el mismo valor de "é" ...
En tu caso te aconsejo que uses ISO-8859-1 o ANSI a la hora de guardar el archivo y en los headers del documento HTML. El motivo es simple, prueba a crear el siguiente documento con UTF-8 y pruebalo; seguidamente prueba a guardar el mismo documento en ISO-8859-1 y has la misma prueba.

Código PHP:
Ver original
  1. <?php
  2. $a = 'México';
  3. echo strlen($a);
  4. ?>
Si hiciste las pruebas correctamente, para ISO-8859-1 el resultado será 6, y para UTF-8 será 7. ¿Porqué la función strlen devuelve 7 cuando el documento está en UTF-8? Porque la letra é ocupa dos espacios (técnicamente usa dos bytes y las demás letras un solo byte en las dos codificaciones), adicionalmente que la base del lenguaje PHP no está diseñada para UTF-8.

Al momento que realizas $a[1] solamente estás pidiendo un solo byte y por consiguiente no va a funcionar como esperabas si el documento no está en ISO-8859-1, donde no hay letras de dos espacios o bytes.

Cita:
Iniciado por pzin Ver Mensaje
En realidad no lo podemos observar. Tienes que guardar el archivo con esa codificación con tu editor de texto.
Técnicamente si lo podemos observar pero tomaría tiempo estar probando los resultados que obtuvo, aunque claramente se observa que cuando realizo un utf_encode le devolvió dos bytes. Así a ojo de buen cubero podría decir que el documento está almacenado en ISO-8859-1 pero tiene el header UTF-8, en otras palabras incorrectamente, aunque puedo estar equivocado por que no hice las pruebas correspondientes.

Cita:
Iniciado por Dave_27 Ver Mensaje
... otro dato importante que descubrí es que si almaceno en una variable solo la letra "é" y la imprimo me la imprime bien, pero si pongo el offset cero de esa variable ya me aparece el caracter raro ...
Si no tienes experiencia con que es un byte, asegurate de usar ISO-8859-1 y olvidate de estar convirtiendo entre ISO-8859-1 y UTF-8. Adicionalmente muchos programas dicen que guardan los documentos en ISO cuando realmente no lo 'convierten', copiar y pegar es el ejemplo clásico de mezclar en un solo documento dos codificaciones diferentes.

Cita:
Iniciado por Sirrohan Ver Mensaje
...
Primera:
Con tu editor de texto, guarda el archivo con codificación "UTF-8" o "ISO-8859-1".

Segunda:
Código PHP:
Ver original
  1. echo "Con utf8_encode: ".utf8_encode($prueba)."<br/>";
  2. echo "Con utf8_decode: ".utf8_decode($prueba)."<br/>";
Para lo que quiere hacer solamente le vale ISO. La $prueba[1] en UTF-8 siempre va a devolver un byte y por lo tanto no lo va a mostrar bien sea como sea. A menos que use $prueba = utf8_decode($prueba); entronces en $prueba va a tener la codificación ANSI y allí si puede usar $prueba[1].

En resúmen cuando quieras hacer expresiones regulares, cambiar letras por otras o extraer letras de un String, usa ISO para no complicarte la existencia, a menos que seas un experto en codificaciones de caracteres y su interpretación de bytes.

Saludos,