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 字符已被替换为看起来像八角形内的问号。换回原来的字符后,我仍然无法让它工作。如果我对 ascii 字符使用不同的字符串,则代码可以正常工作,但显然没有给出正确的数据。

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

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

4

1 回答 1

0

问题是您正在使用的编辑器(在我看来是正确的)希望您的文件是 UTF-8。由于不是,它用“缺失字符”占位符替换了您的字符,该占位符具有不同的二进制值,因此您不会在文档中找到它。

由于您知道您希望角色具有的二进制值 (0xC5),因此您可以使用十六进制转义序列\xC5在源文件中表示它,而不必担心期望 Unicode 的编辑器会扼杀它。

于 2013-03-13T21:14:57.497 回答