0

まず最初に。これは機能していましたが、問題の文字の代わりに別の文字列を選択しても機能します。

次のコードは、ファイル内で必要なデータ ブロックのすべてのオカレンスを検索するために使用されています。各ブロックは「3476 DSR」で始まり、「Å」で終わります。キャラクターの仕様は次のとおりです。

DEC OCT HEX BIN シンボル HTMLNumber HTMLName 説明

197 305 C5 11000101 Å \Å\; \&指輪\; 上にリングが付いたラテン大文字 A

コードは次のとおりです。

$path = 'report';
$file = $_POST['select'];
$filepath = $path . DIRECTORY_SEPARATOR . $file;

$report = file_get_contents($filepath,'r');

$string1 = "3476 DSR";
$string2 = "Å";

preg_match_all("(".preg_quote($string1).".*?".preg_quote($string2).")s",$report,$matches);


echo '<div class="output">';

foreach ($matches[0] as $value) {

echo "<pre>";
echo $value;
echo "</pre>";

}

echo '</div>';

これは問題なく機能していましたが、調査中に、拡張ASCII文字が八角形内の疑問符のように見えるものに何らかの形で置き換えられていることがわかりました。元のキャラクターを元に戻した後も、まだ機能しません。アスキー文字に別の文字列を使用すると、コードは正常に機能しますが、明らかに正しいデータが得られません。

これに関連するものを見つけるのは困難であり、上記のさまざまな識別子を使用してみましたが、うまくいきませんでした。

ここで何が問題なのか知っている人はいますか?

4

1 に答える 1

0

問題は、あなたが使用しているエディター (当然のことですが、私の意見では) がファイルが UTF-8 であることを想定していることです。そうではないため、文字を別のバイナリ値を持つ「欠落文字」プレースホルダーに置き換えたため、ドキュメントでそれを見つけることができなくなりました。

キャラクターが持っていると予想されるバイナリ値 (0xC5) を知っているので、16 進エスケープ シーケンスを使用し\xC5て、ソース ファイルでそれを表すことができます。

于 2013-03-13T21:14:57.497 に答える