2012-02-13 64 views
0

感謝您抽出寶貴時間來爲我效勞。在PHP中處理字符串時出現意外的結果

背景:我正在處理個人理財項目的OFX/QFX文件。我用C#編寫了代碼,並且它完美地執行。我可以創建我的導入對象,逐行處理OFX/QFX文件,並將前面提到的對象輸出到控制檯。不過,我正在將它移植到PHP中,以用於未在.Net Framework上編寫的Web應用程序。

問題:文件被用戶上傳並傳遞給我的PHP文件。當使用$line = fgets($file);逐行讀取文件時,我沒有得到預期的結果。我知道文件已打開並且正在讀取該行。然而;當我把var_dump($line)後立即爲變量賦予我收到 "string(15) "ENG ""的時候,我應該得到的是:

<LANGUAGE>ENG 

我的處理模式在很大程度上取決於閱讀字符串的標記部分的能力,而是因爲PHP似乎被剝離出來,我的代碼沒有按預期執行。

問:有誰能告訴我爲什麼我在使用fgets()時沒有收到完整的字符串值?還有更正確的方法來做到這一點?我對.Net非常瞭解,但是PHP對我來說有點新,所以我認爲這只是PHP語言的一個怪癖,我不明白。

謝謝

+0

如果您只是將線路回顯出來,會發生什麼情況? – FreudianSlip 2012-02-13 22:49:30

+0

該變量是正確的,但一旦它被打印到瀏覽器中,該標記將被忽略,因爲它試圖將其視爲HTML。 – 2012-02-13 22:54:10

回答

0

正如你可以看到你的var_dump()結果,它是一個15個字符長的字符串。您的問題可能是<LANGUAGE>標記未顯示,但顯示「there」。

嘗試使用htmlspecialchars($line);代替。但我通常推薦使用var_dump(),因爲它非常清楚地顯示了變量值的類型和長度。

+0

正如你的帖子。所有帖子的高潮幫助我指引了正確的方向。 – 2012-02-13 23:44:40

3

的問題是,<LANGUAGE>是由瀏覽器解析,認爲是無效的HTML標籤和忽略。

在瀏覽器中右鍵單擊查看源以查看實際輸出。

+0

非常感謝您的回覆。知道這些信息有助於我意識到問題出在我的代碼而不是代碼本身。這肯定會讓我走上正確的道路。非常感謝你! – 2012-02-13 23:43:10

+0

不客氣。我很高興它的工作:) – 2012-02-13 23:43:59

0

我想冒險猜測如果<LANGUAGE>ENG是你期望被輸出到屏幕上,那麼它可能是。您的網絡瀏覽器將會看到它並嘗試將其解析爲標籤,並僅顯示與該標籤相關的數據,而不是標籤本身。不是PHP的問題。嘗試使用預標籤回顯線

echo '<pre>' . $line . '</pre>'; 
+0

這對我也有幫助。謝謝! – 2012-02-13 23:43:47