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脚本数据库功能详解(中)
Oct 09 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php+javascript的日历控件
Nov 19 PHP
PHP strtotime函数详解
Dec 18 PHP
php 获取全局变量的代码
Apr 21 PHP
如何设置mysql允许外网访问
Jun 04 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
简单的自定义php模板引擎
Aug 26 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
SMARTY学习手记
2007/01/04 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
php实现记事本案例
2020/10/20 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
Python中常见的数据类型小结
2015/08/29 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python pyheatmap包绘制热力图
2018/11/09 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Python 必须了解的5种高级特征
2020/09/10 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
求职信格式范本
2013/11/15 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
给全校老师的建议书
2014/03/13 职场文书
分公司经理任命书
2014/06/05 职场文书
终止劳动合同协议书
2014/10/05 职场文书
安全学习心得体会范文
2016/01/18 职场文书
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
进行数据处理的6个 Python 代码块分享
2022/04/06 Python