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 相关文章推荐
phpinfo 系统查看参数函数代码
Jun 05 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
php调用新浪短链接API的方法
Nov 08 PHP
PHP 快速排序算法详解
Nov 10 PHP
php中fsockopen用法实例
Jan 05 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
PHP实现支付宝即时到账功能
Dec 21 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
php事务处理实例详解
2014/07/11 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
详解js异步文件加载器
2016/01/24 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
JQuery 入门实例1
2009/06/25 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
外贸实习生自荐信范文
2013/11/24 职场文书
公司总经理岗位职责
2014/03/15 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
小学生演讲稿大全
2014/04/25 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
护士求职自荐信
2015/03/25 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
python 命令行传参方法总结
2021/05/25 Python