PHP 產生的XML以FLASH擷取為亂碼終極解決_php技巧

來源:互聯網
上載者:User
經過探索最終解決。記錄之,順便也記錄了通用解決方案。如果你也遇到XML<->FLASH亂碼情況,可以速查:

1.確信XML絕對沒有問題的情況:
首先,flash讀取xml出現亂碼涉及到System.useCodepage這個靜態屬性屬性
官方描述:“A Boolean value that tells Flash Player which code page to use to interpret external text files.”預設為false。
倘若我們使用UTF8編碼的外部文字檔,PHP100.com 都不用管它,使用非UTF8編碼文字檔且文本中出現中文字元的話,則需要設定其為true方能讓flash讀出字元不亂碼。
AS3中可先import flash.system.System;然後設定System.useCodePage=true;

2.希望PHP產生UTF-8編碼的XML:
要想在XML中存在中文字元,最好使用UTF-8編碼。在使用DOM建立XML前聲明為$dom_XML = new DomDocument('1.0′,'UTF-8′);第二個參數對應XML文檔聲明部分的encoding值。但是注意:這僅僅是聲明的編碼,最後使用$dom_XML->saveXML();實際產生的xml檔案卻是和PHP指令碼源檔案編碼格式相同,即“你的PHP是什麼編碼,產生的檔案即什麼編碼。”

3.XML檔案聲明編碼為UTF-8 ,flash中無論useCodepage設為何值讀取都還是亂碼
經常會遇到這種情況,通常是因為:雖然聲明部分是UTF-8,但檔案本身卻不是UTF-8的(我自己就是ANSI編碼的,汗)。
那將會導致一個嚴重的問題:Firefox瀏覽器可以正常解釋XML,但IE(包括TT等IE核心瀏覽器)卻提示存在錯誤的字元,Flash也顯示亂碼!
這種情況處理方法有二:

把XML聲明部分改成非UTF-8的,比如GB2312,然後設定FLASH的useCodepage=true;
把XML用記事本開啟,使用“另存新檔”命令儲存為UTF-8的即可
也就是讓編碼聲明與檔案本身編碼匹配,不能名不符實。

4.PHP源檔案不是UTF8編碼的,要怎麼產生讓FLASH支援中文字元的XML呢?也就是我遇到的情況:
PHP是ANSI儲存的,使用DOM產生的XML自然也是ANSI的,PHP100.com 這個編碼的XML檔案中若含有中文字元,即使聲明編碼為UTF-8,也無法被正確讀取。
在這個前提下,要想FLASH正確讀取XML不出現亂碼,就必須設定encoding為GB2312。
而PHP的DOM居然不能用GB2312寫中文字元(不解,請達人指點迷津)?如果new DomDocument('1.0′,'GB2312′);則在儲存XML時會出錯:“output conversion failed due to conv error, bytes 0xCE 0xD2 0×5D 0×5D”之類的。也就是說我這個ANSI的PHP只能產生聲明為UTF-8而實際是ANSI的XML檔案,這種檔案當然FLASH讀出來亂碼(參照第3條)。

我的解決法:
在PHP用UTF-8的聲明產生了XML後,加了一步操作:開啟XML檔案改寫頭部聲明把UTF-8替換為GB2312。嘿嘿,FLASH,IE,FF都不出錯了!
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.