Digamos que tengo un archivo llamado foo.txt codificado en UTF-8:Trabajar con archivos y UTF-8 en PHP
aoeu
qjkx
ñpyf
y quiero obtener una matriz que contiene todas las líneas en el archivo (una línea por índice) que tienen las letras aoeuñpyf, y solo las líneas con estas letras.
I escribió el siguiente código (también codificado como utf8):
$allowed_letters=array("a","o","e","u","ñ","p","y","f");
$lines=array();
$f=fopen("foo.txt","r");
while(!feof($f)){
$line=fgets($f);
foreach(preg_split("//",$line,-1,PREG_SPLIT_NO_EMPTY) as $letter){
if(!in_array($letter,$allowed_letters)){
$line="";
}
}
if($line!=""){
$lines[]=$line;
}
}
fclose($f);
Sin embargo, después de eso, la matriz $lines
sólo tiene la línea aoeu en ella.
Esto parece ser porque de alguna manera, la "ñ" en $allowed_letters
no es lo mismo que la "ñ" en foo.txt.
También si imprimo una "ñ" del archivo, aparece un signo de interrogación, pero si lo imprimo así print "ñ";
, funciona.
¿Cómo puedo hacer que funcione?
Probablemente sus s "n" no son iguales: uno es un solo símbolo de la "ñ" y otra es [combinado de dos caracteres] (http://en.wikipedia.org/wiki/Unicode#Combining_characters) –
No, ese no es el caso. Los teclados españoles tienen una tecla ñ y escriben un solo carácter. –