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之变量、常量学习笔记
Mar 27 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
深入理解PHP中的count函数
May 31 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php下连接mssql2005的代码
2011/01/17 PHP
php的hash算法介绍
2014/02/13 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
django_orm查询性能优化方法
2018/08/20 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
经典英文广告词
2014/03/18 职场文书
我的求职择业计划书
2014/04/04 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
创业计划书之餐饮
2019/09/02 职场文书