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读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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 socket通信(tcp/udp)实例分析
2016/02/14 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
Python 调用DLL操作抄表机
2009/01/12 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
单位成立周年感言
2014/01/26 职场文书
病媒生物防治方案
2014/05/13 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
付款证明模板
2015/06/19 职场文书
保险公司增员口号
2015/12/25 职场文书
浅析Django接口版本控制
2021/06/26 Python
python三子棋游戏
2022/05/04 Python