Cita:
Iniciado por Dave_27
.. 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.
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
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
... 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
...
Primera:
Con tu editor de texto, guarda el archivo con codificación "UTF-8" o "ISO-8859-1".
Segunda:
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,