重要的事情先说。如果我选择一个不同的字符串而不是问题中的字符,这将仍然工作。
下面的代码用于查找文件中所需的数据块的所有出现。每个块以"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的编辑器会将其删除。