Если вы работаете в Windows, ОС не сохраняет файлы в UTF-8, но в cp1251 (или что-то ...) по умолчанию вам нужно явно сохранить файл в этом формате или запустить каждую строку в utf8_encode()
перед выполнением проверки.Т.е.:
$line=utf8_encode(fgets($f));
Если вы уверены, что файл имеет кодировку UTF-8, является ли ваш PHP-файл также кодированным UTF-8?
Если все имеет формат UTF-8, точто вам нужно:
foreach(preg_split("//u",$line,-1,PREG_SPLIT_NO_EMPTY) as $letter){
// ...
}
(добавьте u
для символов Юникода)
Однако позвольте мне предложить еще более быстрый способ выполнить вашу проверку:
$allowed_letters=array("a","o","e","u","ñ","p","y","f");
$lines=array();
$f=fopen("foo.txt","r");
while(!feof($f)){
$line=fgets($f);
$line = str_split(rtrim($line));
if (count(array_intersect($line, $allowed_letters)) == count($line)) {
$lines[] = $line;
}
}
fclose($f);
(добавьте пробельные символы, чтобы разрешить использование пробельных символов, и удалите rtrim($line)
)