PHP - ¿como maneja php los caracateres acentuados y las eñes?

 
Vista:

¿como maneja php los caracateres acentuados y las eñes?

Publicado por Pepe Delgado (1 intervención) el 17/01/2023 11:39:16
Buenos días a todos. Intento guardar en un array los diferentes caracteres que se utilizan en un texo ordenados por orden de aparición. Y me encontré con esta peculiaridad en los acentos ¿Alguien sabe explicarme como maneja php esto?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php $acentos = 'áéíóúñ';
$prueba_acentos="";
$array_acentos=array();
 
print 'strlen_acentos = ' . strlen($acentos); // 12 (!!!yo esperaba 6)
echo '<br>';
 
for($i=0;$i<strlen($acentos);$i++){
	print substr($acentos,$i,1);
	$prueba_acentos.=substr($acentos,$i,1);
	$array_acentos[]=substr($acentos,$i,1);
}
//áéíóúñ (yo esperaba 12 caracteres)
 
echo '<br>';
print $prueba_acentos; //áéíóúñ (yo esperaba 12 caracteres)
echo '<br>';
for($i=0;$i<count($array_acentos);$i++){
	print $array_acentos[$i];
}
//áéíóúñ (yo esperaba 12 caracteres)
echo '<br>';
 
//Sin embargo
for($i=0;$i<count($array_acentos);$i++){
	print $array_acentos[$i];
	print ',';
}
//�,,,,,,,,,,,, (aqui ya hay 12 caracteres, o algo parecido, aunque no se ve cuales son)
echo '<br>';
print (in_array('á',$array_acentos)) ? 'existe á' : 'no existe á';//no existe á
echo '<br>';
 
//Sin embargo
$array_acentos_ok = array();
for($i=0;$i<count($array_acentos);$i++){
	if(($i % 2) == 0){ //si es par creo un nuevo elemento en el array
		$array_acentos_ok[$i] = substr($acentos,$i,1);
	} else {
		$array_acentos_ok[$i-1] .= substr($acentos,$i,1);//si es impar añado el segundo "caracter" al elemento que había en el array
	}
}
print (in_array('á',$array_acentos_ok)) ? 'ahora existe á' : 'aun no existe á';//ahora existe á
?>

Parece que php maneja los caraceteres acentuados y eñes como un par de elementos, pero no sé cuales son esos elementos. Por tanto no puedo identificar los diferentes caracteres acentuados ni las eñes. Al menos de esta menera.
Gracias!!!
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.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

¿como maneja php los caracateres acentuados y las eñes?

Publicado por Alejandro (839 intervenciones) el 17/01/2023 16:15:50
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
strlen() te devuelve la longitud en bytes, utiliza mb_strlen() para obtener la longitud en caracteres.
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 Ivan

¿como maneja php los caracateres acentuados y las eñes?

Publicado por Ivan (118 intervenciones) el 18/01/2023 14:06:43
Hola,

a parte de lo que dice Alejandro, esto es debido a que los caracteres no se codifican con un solo Byte, sinó con 2 Bytes o incluso más según la codificación UNICODE.

https://home.unicode.org/technical-quick-start-guide/

Un saludo!
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