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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
十大使用PHP框架的理由
Sep 26 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 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定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
JSONP跨域请求
2017/03/02 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
大学生咖啡店创业计划书
2014/01/21 职场文书
《母鸡》教学反思
2014/02/25 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
加强作风建设工作总结
2014/10/23 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
MySQL锁机制
2021/04/05 MySQL
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
Python使用Web框架Flask开发项目
2022/06/01 Python