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 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
php设计模式之策略模式应用案例详解
Jun 17 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与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
php压缩文件夹最新版
2018/07/18 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python实现的简单万年历例子分享
2014/04/25 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python画微信表情符的实例代码
2019/10/09 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
《我的第一本书》教学反思
2014/02/15 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
2014企业年终工作总结
2014/12/23 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
婚礼伴郎致辞
2015/07/28 职场文书