使用扩展的ascii码作为第二个字符串在文件搜索使用PHP


Using extended ascii code as second string in file search using PHP

重要的事情先说。如果我选择一个不同的字符串而不是问题中的字符,这将仍然工作。

下面的代码用于查找文件中所需的数据块的所有出现。每个块以"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字符被替换为一个八角形内看起来像一个问号。把原来的字符换回来后,我还是不能用。如果我使用不同的字符串作为ascii字符,代码工作正常,但显然不能给出正确的数据。

很难找到与此相关的任何东西,我试过使用上面不同的标识符,但没有运气。

有人知道这里可能有什么问题吗?

问题是您正在使用的编辑器(在我看来是正确的)期望您的文件为UTF-8。因为它不是,它用"缺失字符"占位符替换了你的字符,它有一个不同的二进制值,这样你就不会在你的文档中找到它了。

由于您知道您期望字符具有的二进制值(0xC5),因此您可以使用十六进制转义序列'xC5在源文件中表示它,而不必担心期望Unicode的编辑器会将其删除。