PHP中使用in_array()函数判断阿拉伯语是否存在

3

我正在使用in_array函数处理阿拉伯语言...

in_array('من', $words) 返回true,说明$words中确实包含من

但是in_array('من', $stopWords)返回false,尽管$stopWords中包含该单词。

print_r($stopWords);

给出:

数组([0] => من)

print_r($words);

给出:

数组([0] => من)

可能的问题是什么?


7
最可能的解释是两个比较字符串存储在不同的字符集中。您是否在同一个 PHP 文件中定义数组并进行检查?如果不是,在确定两者是否采用相同的编码时,您是否百分之百确定它们处于相同的编码状态? - Pekka
也许文本字符串中实际包含演示范围的代码点。另一个可能性是诺恩上有卡斯拉或法塔,而您没有看到它,因为您的编辑器使用了一个糟糕的字体,无法正确定位元音标记。最有可能的是单词前后有空格。 - cleong
$words是由我定义的(我确定它是utf-8),但$stopWords是从文本文件(Windows)中获取的,如下所示: $stopText = file_get_contents($stopWordsFilename); $stopWords = mb_split('[\n]', $stopText); 我认为问题应该与此问题有关... - Ibrahim.I
你尝试过在两个字符串上使用mb_strlen()函数来获取确切的字符长度吗?这可能是因为糟糕的字体导致这些UTF-8中的单词具有不同的字符长度,尽管它们看起来相同。 - Ivan Hušnjak
@IvanHušnjak 没错... $stopWords[0] 给出了3个,而$words[0]只给出了2个,但是是同一个单词... 我真的很困惑...有没有解决办法? - Ibrahim.I
显示剩余3条评论
2个回答

0

这个应该使用unicode。如果你将阿拉伯字母转换成unicode,那么你可以在数组中进行检查。这样你就不会遇到任何问题。


0

$stopWords[0] 是以空格开头的 'من '。 因为我必须处理真实的文本文件并将其反映到 $stopWords 中,所以我无法修改它。 取而代之,我使用 mb_strpos 来捕获数组 $stopWords 的任何元素中出现单词 'من' 的情况。 问题解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接