PHP 生成的XML以FLASH獲取為亂碼終極解決
更新時間:2009年08月07日 00:45:52 作者:
最不怕跟匪夷所思的問題作斗爭了,看誰牛鼻。都好久沒在編碼上遇到過障礙了,今天居然又遇到個小茶包——PHP生成的XML,以FLASH獲取卻為亂碼。
經(jīng)過探索最終解決。記錄之,順便也記錄了通用解決方案。如果你也遇到XML<->FLASH亂碼情況,可以速查:
1.確信XML絕對沒有問題的情況:
首先,flash讀取xml出現(xiàn)亂碼涉及到System.useCodepage這個靜態(tài)屬性屬性
官方描述:“A Boolean value that tells Flash Player which code page to use to interpret external text files.”默認(rèn)為false。
倘若我們使用UTF8編碼的外部文本文件,PHP100.com 都不用管它,使用非UTF8編碼文本文件且文本中出現(xiàn)中文字符的話,則需要設(shè)置其為true方能讓flash讀出字符不亂碼。
AS3中可先import flash.system.System;然后設(shè)置System.useCodePage=true;
2.希望PHP生成UTF-8編碼的XML:
要想在XML中存在中文字符,最好使用UTF-8編碼。在使用DOM創(chuàng)建XML前聲明為$dom_XML = new DomDocument('1.0′,'UTF-8′);第二個參數(shù)對應(yīng)XML文檔聲明部分的encoding值。但是注意:這僅僅是聲明的編碼,最后使用$dom_XML->saveXML();實際生成的xml文件卻是和PHP腳本源文件編碼格式相同,即“你的PHP是什么編碼,生成的文件即什么編碼?!?
3.XML文件聲明編碼為UTF-8 ,flash中無論useCodepage設(shè)為何值讀取都還是亂碼
經(jīng)常會遇到這種情況,通常是因為:雖然聲明部分是UTF-8,但文件本身卻不是UTF-8的(我自己就是ANSI編碼的,汗)。
那將會導(dǎo)致一個嚴(yán)重的問題:Firefox瀏覽器可以正常解釋XML,但I(xiàn)E(包括TT等IE內(nèi)核瀏覽器)卻提示存在錯誤的字符,F(xiàn)lash也顯示亂碼!
這種情況處理方法有二:
把XML聲明部分改成非UTF-8的,比如GB2312,然后設(shè)置FLASH的useCodepage=true;
把XML用記事本打開,使用“另存為”命令保存為UTF-8的即可
也就是讓編碼聲明與文件本身編碼匹配,不能名不符實。
4.PHP源文件不是UTF8編碼的,要怎么生成讓FLASH支持中文字符的XML呢?也就是我遇到的情況:
PHP是ANSI保存的,使用DOM生成的XML自然也是ANSI的,PHP100.com 這個編碼的XML文件中若含有中文字符,即使聲明編碼為UTF-8,也無法被正確讀取。
在這個前提下,要想FLASH正確讀取XML不出現(xiàn)亂碼,就必須設(shè)置encoding為GB2312。
而PHP的DOM居然不能用GB2312寫中文字符(不解,請達(dá)人指點(diǎn)迷津)?如果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文件,這種文件當(dāng)然FLASH讀出來亂碼(參照第3條)。
我的解決法:
在PHP用UTF-8的聲明生成了XML后,加了一步操作:打開XML文件改寫頭部聲明把UTF-8替換為GB2312。嘿嘿,F(xiàn)LASH,IE,FF都不出錯了!
1.確信XML絕對沒有問題的情況:
首先,flash讀取xml出現(xiàn)亂碼涉及到System.useCodepage這個靜態(tài)屬性屬性
官方描述:“A Boolean value that tells Flash Player which code page to use to interpret external text files.”默認(rèn)為false。
倘若我們使用UTF8編碼的外部文本文件,PHP100.com 都不用管它,使用非UTF8編碼文本文件且文本中出現(xiàn)中文字符的話,則需要設(shè)置其為true方能讓flash讀出字符不亂碼。
AS3中可先import flash.system.System;然后設(shè)置System.useCodePage=true;
2.希望PHP生成UTF-8編碼的XML:
要想在XML中存在中文字符,最好使用UTF-8編碼。在使用DOM創(chuàng)建XML前聲明為$dom_XML = new DomDocument('1.0′,'UTF-8′);第二個參數(shù)對應(yīng)XML文檔聲明部分的encoding值。但是注意:這僅僅是聲明的編碼,最后使用$dom_XML->saveXML();實際生成的xml文件卻是和PHP腳本源文件編碼格式相同,即“你的PHP是什么編碼,生成的文件即什么編碼?!?
3.XML文件聲明編碼為UTF-8 ,flash中無論useCodepage設(shè)為何值讀取都還是亂碼
經(jīng)常會遇到這種情況,通常是因為:雖然聲明部分是UTF-8,但文件本身卻不是UTF-8的(我自己就是ANSI編碼的,汗)。
那將會導(dǎo)致一個嚴(yán)重的問題:Firefox瀏覽器可以正常解釋XML,但I(xiàn)E(包括TT等IE內(nèi)核瀏覽器)卻提示存在錯誤的字符,F(xiàn)lash也顯示亂碼!
這種情況處理方法有二:
把XML聲明部分改成非UTF-8的,比如GB2312,然后設(shè)置FLASH的useCodepage=true;
把XML用記事本打開,使用“另存為”命令保存為UTF-8的即可
也就是讓編碼聲明與文件本身編碼匹配,不能名不符實。
4.PHP源文件不是UTF8編碼的,要怎么生成讓FLASH支持中文字符的XML呢?也就是我遇到的情況:
PHP是ANSI保存的,使用DOM生成的XML自然也是ANSI的,PHP100.com 這個編碼的XML文件中若含有中文字符,即使聲明編碼為UTF-8,也無法被正確讀取。
在這個前提下,要想FLASH正確讀取XML不出現(xiàn)亂碼,就必須設(shè)置encoding為GB2312。
而PHP的DOM居然不能用GB2312寫中文字符(不解,請達(dá)人指點(diǎn)迷津)?如果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文件,這種文件當(dāng)然FLASH讀出來亂碼(參照第3條)。
我的解決法:
在PHP用UTF-8的聲明生成了XML后,加了一步操作:打開XML文件改寫頭部聲明把UTF-8替換為GB2312。嘿嘿,F(xiàn)LASH,IE,FF都不出錯了!
相關(guān)文章
PHP連接MySQL數(shù)據(jù)庫的三種方式實例分析【mysql、mysqli、pdo】
這篇文章主要介紹了PHP連接MySQL數(shù)據(jù)庫的三種方式,結(jié)合實例形式分析了PHP基于mysql、mysqli、pdo三種方式連接MySQL數(shù)據(jù)庫的相關(guān)操作技巧與注意事項,需要的朋友可以參考下2019-11-11學(xué)習(xí)php設(shè)計模式 php實現(xiàn)策略模式(strategy)
這篇文章主要介紹了php設(shè)計模式中的適配器模式,使用php實現(xiàn)適配器模式,感興趣的小伙伴們可以參考一下2015-12-12PHP實現(xiàn)二叉樹的深度優(yōu)先與廣度優(yōu)先遍歷方法
這篇文章主要介紹了PHP實現(xiàn)二叉樹的深度優(yōu)先與廣度優(yōu)先遍歷方法,涉及php針對二叉樹進(jìn)行遍歷的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09php-redis中的sort排序函數(shù)總結(jié)
這篇文章主要介紹了php-redis中的sort排序函數(shù)總結(jié),本文講解了了按字母排序、排序取部分?jǐn)?shù)據(jù)、使用外部key進(jìn)行排序等排序方法,同時給出代碼實例,需要的朋友可以參考下2015-07-07php實現(xiàn)壓縮合并js的方法【附demo源碼下載】
這篇文章主要介紹了php實現(xiàn)壓縮合并js的方法,涉及php壓縮文件類JSMin的相關(guān)調(diào)用與使用技巧,并附帶了完整的demo源碼供讀者下載參考,需要的朋友可以參考下2016-09-09PHP swoole的process模塊創(chuàng)建和使用子進(jìn)程操作示例
這篇文章主要介紹了PHP swoole的process模塊創(chuàng)建和使用子進(jìn)程操作,結(jié)合實例形式分析了swoole的進(jìn)程管理process模塊實現(xiàn)進(jìn)程間通信相關(guān)操作技巧,需要的朋友可以參考下2020-03-03