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中Session的概念
Oct 09 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
php实现RSA加密类实例
Mar 26 PHP
PHP实现简单数字分页效果
Jul 26 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
php获取文件后缀的9种方法
Mar 22 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 PHP
php提高脚本性能的4个技巧
Aug 18 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出错界面
2006/10/09 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
javascript运动详解
2015/07/06 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
wxPython实现文本框基础组件
2019/11/18 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
小学生感恩演讲稿
2014/04/25 职场文书
小学生演讲稿大全
2014/04/25 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS