簡體   English   中英

使用PHP從.prt文件中提取XML,但使用PHP打開時文件變得不可讀

[英]Extract XML from .prt file using PHP but file becomes unreadable when opened with PHP

我有一個.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。 如何解決我遇到的問題? 提前非常感謝您。

真實答案

原來,代碼根本沒有問題。 瀏覽器只是將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數據的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM