PHP 生成的XML以FLASH获取为乱码终极解决


Posted in PHP onAugust 07, 2009

经过探索最终解决。记录之,顺便也记录了通用解决方案。如果你也遇到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都不出错了!

PHP 相关文章推荐
PHP学习之正则表达式
Apr 17 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
基于swoole实现多人聊天室
Jun 14 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 PHP
PHP操作Redis常用命令的实例详解
Dec 23 PHP
php引用传递
Apr 01 PHP
php 全局变量范围分析
Aug 07 #PHP
PHP 多维数组排序实现代码
Aug 05 #PHP
PHP 简单数组排序实现代码
Aug 05 #PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 #PHP
一些 PHP 管理系统程序中的后门
Aug 05 #PHP
黑夜路人出的几道php笔试题
Aug 04 #PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 #PHP
You might like
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
javascript实现下雨效果
2017/03/27 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
利用js canvas实现五子棋游戏
2020/10/11 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
Python中多线程的创建及基本调用方法
2016/07/08 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
浅谈Python中的bs4基础
2018/10/21 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
百度吧主申请感言
2014/01/12 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
铁人观后感
2015/06/16 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers