PHP - Problemas con Ñ/ñ (ASCII)

 
Vista:
sin imagen de perfil
Val: 69
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas con Ñ/ñ (ASCII)

Publicado por Anonymus (17 intervenciones) el 11/10/2019 09:36:22
1
2
3
4
5
6
7
if (ord($texto[$i])== 79){    //si es una 'O', sustituye por 'Ñ'
 
    $texto[$i] = chr(165);
}else if(ord($texto[$i])== 165){  //si es una 'Ñ', sustituye por 'O'
 
    $texto[$i] = chr(79);
}


El problema es el siguiente: en la primera condición, no me convierte la 'O' en 'Ñ', sino que lo sustituye por un rombo con una interrogación, como un carácter extraño. (más de uno sabrá de lo que hablo).

En el segundo caso, la 'Ñ' no reconoce esa condición y no se modifica.

La conclusión es evidente (o eso creo): PHP no reconoce el ASCII(165) --que es la Ñ-- ni ninguno de los ASCII extendidos.

¿Alguien que sepa el origen del error y como solucionarlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.822
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problemas con Ñ/ñ (ASCII)

Publicado por Alejandro (594 intervenciones) el 11/10/2019 15:35:59
Agrega el inicio
1
header('Content-Type: text/html; charset=utf-8');

Asegurate de que la codificación de tu archivo sea UTF-8
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 69
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas con Ñ/ñ (ASCII)

Publicado por Anonymus (17 intervenciones) el 21/10/2019 18:57:30
Así es, pero lo ignora o algo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.822
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problemas con Ñ/ñ (ASCII)

Publicado por Alejandro (594 intervenciones) el 21/10/2019 22:29:14
Con charset ISO-8859-1 y el archivo codificado en ANSI funciona
1
2
3
4
5
6
7
8
9
10
11
12
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
$texto = "HOLA MUNDO";
for($i=0; $i<strlen($texto); $i++){
	if (ord($texto[$i])== 79){    //si es una 'O', sustituye por 'Ñ'
		$texto[$i] = chr(209);
	}else if(ord($texto[$i])== 209){  //si es una 'Ñ', sustituye por 'O'
		$texto[$i] = chr(79);
	}
}
echo $texto;
?>

En UTF8 la Ñ ocupa el doble 195 145, pero ord() solo obtiene el primer conjunto 195
Me gustaría que alguien mas nos explicara esto.
1
2
$texto = "HÑLA";
echo strlen($texto); // resultado 5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar