2010-10-07 92 views
0

我正在做一種迂迴實驗的事情,我從遠程頁面的表格中提取數據以將其轉化爲ICS,以便我可以找出此運動隊何時正在玩(因爲我找不到任何地方信息比本表更容易獲得),但這只是給你一些背景。爲什麼PHP的utf8_encode會破壞我的utf-8字符串?

我使用cURL拉取這些數據並使用domDocument解析它。然後我拿它並解析它以獲取我需要的信息。反對的球隊給了我麻煩。當我在初始PHP頁面上顯示數據時,它是正確的。但是,當我寫入ICS文件時,特殊的UTF-8字符會混亂。我認爲utf8_encode可以解決這個問題,但實際上它似乎有相反的效果:當我在我的數據上運行該功能時,甚至是顯示在頁面上的東西(它已正確顯示),而不是在單獨的ICS文件中寫錯了),是不正確的。舉一個例子:它將「Inđija」變成「InÄija」。

只要在PHP中處理UTF-8字符串,任何提示或資源?我的服務器(遠程主機)也沒有安裝mbstring,這很痛苦。

回答

3

utf8_encode將ISO 8859-1中的字符串編碼爲UTF-8。如果你把UTF-8放入它,它會把它解釋爲ISO 8859-1,從而產生mojibake。

爲了解決您的第一個問題,在此之前,我想知道原始問題中哪些「特殊」字符會被搞亂,以及它們被混淆的方式是什麼?

+1

就像我說過的,đ(d通過它的一條直線,dj)變成了Ä(有時另一個角色出現在這個旁邊,這取決於我在哪裏看到它)。我是否UTF8_encode呢。 – 2010-10-07 16:54:05

+0

另外č和Č正在變成Ä。看起來每個帶有變音符號的字符(這是來自拉丁塞爾維亞語)正在變成Ä。 – 2010-10-07 16:56:24

+0

你在讀什麼ICS文件?您是否嘗試過在開始時編寫BOM? – 2010-10-07 17:13:42

相關問題