【发布时间】:2011-04-17 13:11:37
【问题描述】:
假设我有一个名为 foo.txt 的文件以 utf8 编码:
aoeu
qjkx
ñpyf
我想得到一个数组,其中包含该文件中所有具有字母 aoeuñpyf 的行(每个索引一行),并且仅包含具有这些字母的行。
我写了以下代码(也编码为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);
但是,在那之后,$lines 数组中只有 aoeu 行。
这似乎是因为不知何故,$allowed_letters 中的“ñ”与 foo.txt 中的“ñ”不同。
此外,如果我打印文件的“ñ”,则会出现一个问号,但如果我像这样print "ñ"; 打印它,它会起作用。
我怎样才能让它发挥作用?
【问题讨论】:
-
可能您的“ñ”不相等:一个是单个“ñ”符号,另一个是combined from two characters。
-
不,事实并非如此。西班牙语键盘有一个 ñ 键,它只写一个字符。