2

我有一个 .prt(CAD 设计文件),我需要从使用 PHP 中提取一些 XML。当我直接在浏览器中查看这个文件时,我可以看到 XML 以及一些不可读的区域。但是,当我使用 PHP 打开它以从中获取我需要的 XML 时,该文件变得几乎不可读,并且找不到 XML,因为该文件看起来像是被加密的。

这是 .prt 文件在浏览器中直接打开时的外观示例:浏览器中的文件

这是使用 PHP 打开文件时的示例:使用 PHP

这就是我尝试使用 PHP 打开文件的方式:

$handle = fopen("thePart.prt", "rb");
$contents = trim(stream_get_contents($handle));
fclose($handle);
//echo out contents to see what happens
echo $contents;

如果我可以在不执行此操作的情况下打开此文件,我可以自己从中获取 XML。如何解决我遇到的问题?非常感谢您提前。

4

1 回答 1

0

真实答案

事实证明,代码完全没有问题。浏览器只是将 XML 标记解释为 HTML,因此不显示数据(PHP 默认设置内容类型为text/html)。查看源代码时,XML 清晰可见。通过设置php文件的内容类型也可以不查看源代码也能看到XML:

header('Content-Type: text/plain');

这样,浏览器将只显示 XML 的原样,而不会首先尝试将其解析为 HTML。

初步答案

这里只是一个猜测,但可能是您以二进制模式打开文件("rb"在您的第一行代码中。尝试将其作为纯文本文件打开(使用"r"而不是"rb")。

例如,更有可能是编码问题,PHP 试图将 UTF-8 文件解码为 ASCII。由于您正在打开一个二进制文件(我假设 CAD 设计文件是带有一点 XML 的二进制文件),因此 PHP 在尝试检测文件的编码时可能会感到困惑。我需要一份文件的副本才能确定。

尝试比较mb_detect_encoding的结果:

mb_detect_encoding($contents)

以及 .prt 文件中 XML 数据的实际编码。如果它们不同,这就是您知道 PHP 使用错误编码的方式。在这种情况下,使用mb_convert_encoding将 PHP 检测到的编码转换为 XML 数据的编码。

于 2013-08-10T04:34:01.947 回答