2011-07-11 62 views
1

我有一個INI文件是由我正在編寫的另一個團隊成員寫的一個AutoHotKey程序創建的。我正在嘗試將該文件作爲數組讀取到PHP中。我使用內置的file()函數。當我讀取文件並使用var_dump($file)$file是正在讀取文件的數組的名稱)顯示它時,每個字符前面都有一個「\ 0」(空字符)。每個人有沒有人看過這發生過?在我讀入文件後,我可以刪除所有空字符,但我更願意找到解決方案。PHP:文件()每個字符前面加上「 0」

當我在文本編輯器中打開ini文件時,它打開就好。我還使用由Windows創建的desktop.ini文件的file()函數讀入,並且按預期的方式讀入,字符之前沒有「\ 0」

+0

http://os-code-web.blogspot.com/2011/04/15-top-php-coding-tutorials-tips-and.html –

回答

3

它與文件的編碼有關。一些(大多數)unicode編碼需要每個字符2個字節。這意味着每個單字節字符都以\ 0作爲前綴。該文件仍然是完全有效的,但如果您嘗試使用windows-1252類型的單字節編碼讀取它,它會看起來很奇怪。你可以嘗試通過utf8_decode餵它,看看是否清除它。 UTF 8是一種可能的多字節編碼,從1到4個字節(最小爲1)。 你的文本編輯器會自動找出它並將其作爲unicode打開,這就是爲什麼它看起來很好。

注意:因爲它使用2字節編碼,所以它不是utf-8,它可能是utf-16,但UTF-8函數可能能夠解析它。

+0

utf8_decode函數沒有縫隙能夠解析它。它看起來是編碼是一個16位的Unicode格式。你知道一個PHP函數可以解析這個嗎? – James

+2

'$ fixed = mb_convert_encoding($ broken,'UTF-8','UTF-16');'可以做到這一點,如果它真的是UTF-16。 –

+0

是的,我忘了MB字符串函數:http://php.net/manual/en/book.mbstring.php – Tremmors

0

您是否在HEX Editor中打開了該文件?文件中可能有隱藏的字符...

+0

是的我看起來每個其他字符都是空的字符。我無法改變生成ini文件的程序如何對文本進行編碼,但看起來它使用的是16位Unicode格式。有沒有辦法在PHP中進行轉換,以便文件可以正確顯示? – James

相關問題