-2

私は次のコードを持っています:

$stopwords = file("/path/to/my-file.txt", FILE_IGNORE_NEW_LINES);
echo($stopwords[0]." - ");

$words = explode(" ", "alors on danse");
echo($words[0]." - ");

if (in_array($words[0], $stopwords)) {
    echo("yay");
} else {
    echo("nay");
}

alors - alors - nayそして、私が期待しているとき、私はいつも結果として得ますalors - alors - yay

同様の問題に関してここでいくつかのトピックを見てきましたが、解決策はほとんどの場合、リスト配列の要素に対して trim() 関数を使用することでした。試してみましたが、何も変わりませんでした。

私が間違っていることを理解するのを手伝ってもらえますか?

4

2 に答える 2

1

テキストファイルの最初の行の単語だけでは機能しないようです

これは私にアイデアを与えました:あなたのmy-file.txtはutf8ですか?

BOM 付きの utf8として保存できます。これは、utf8 として表示されたときにテキストとして表示されないバイトで構成されるバイト オーダー マークですが、最初の単語との間に空白文字がない場合は、最初の単語の一部として解釈されます。最初の本当の言葉。( wiki エントリ) (このため、utf8 での BOM の使用は推奨されていませんが、一部のエディターではまだデフォルトとして使用されています)。

その場合は、BOM なしでファイルを utf8 として保存してみてください(たとえば、notepad++ を使用)。

結論: エンコーディングは大雑把です。表示されたテキストを確認するだけでなく、16 進エディタまたは同様のツールを使用して、文字列が似ているだけでなく、実際に同じバイト シーケンスであるかどうかを確認する必要がある場合もあります。

于 2013-07-29T12:21:29.083 に答える