13

次のコードでファイルから入力を取得しています

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh), " \t\n\r"))));

私も以前にトラブルシューティング中にこれらを試しました

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh)))));
$jap= addslashes(strtolower(trim(fgets($fh), " \t\n\r")));

$ japをエコーすると問題ないように見えるので、コードの後半で$ japに他の変更を加えることなく、DBに挿入されますが、このjapがすでにDBにあるかどうかを確認する比較テストで、iの場合にfalseが返されることに気付きました。一見まったく同じjapのエントリがDBにあることがはっきりとわかります。だから私はphpmyadminまたはjapが表示されている私のサイトから直接挿入されたjapエントリをコピーし、メモ帳に貼り付けます...(これは以下の引用符に正確に貼り付けられています)

「」

あにのって、うみへろうました」

そして明らかに私が必要としているのは、その空白や切れ目などがないことです。

私が知る限り、トリムはそれが行うと言っていることを行っていません。またはここで何かが足りない。もしそうなら、それは何ですか?

更新:ジャックスの答えに関して

preg_replaceは役に立ちませんでしたが、これが私がしたことです。bin2hex()を使用して、「必要な部分ではない」部分がefbbbfであると判断しました。見つけることを期待して、残っているものはbin2hexに入ります。結果は上記の「efbbbf」でした

echo bin2hex(str_replace("どちらがあなたの本ですか","",$jap));

上記の出力はefbbbfでしたが、それは何ですか?どういうわけかこれを削除するためにstr_replaceを作成できますか?

4

1 に答える 1

36

関数はUnicodeのtrim空白を認識しません。あなたはこれを試すことができます:

preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $str);

引用元:PHP5.2でUnicode空白を削除する

それ以外の場合はbin2hex()、前面に追加されている文字を確認するためにを行うことができます。

アップデート

ファイルにはUTF8BOMが含まれています。それを削除するには:

$f = fopen("file.txt", "r");
$s = fread($f, 3);
if ($s !== "\xef\xbb\xbf") {
    // bom not found, rewind file
    fseek($f, 0, SEEK_SET);
}
// continue reading here
于 2012-06-02T01:48:32.787 に答える