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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
php 冒泡排序 交换排序法
May 10 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
php错误级别的设置方法
Jun 17 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
一组PHP加密解密函数分享
Jun 05 PHP
php类自动加载器实现方法
Jul 28 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
PHP 对象接口简单实现方法示例
Apr 13 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数组键名技巧小结
2015/02/17 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
ArrayList类(增强版)
2007/04/04 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
Europcar比利时:租车
2019/08/26 全球购物
上海期货面试题
2014/01/31 面试题
幼儿园实习自我鉴定
2013/12/15 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
经典毕业生求职信
2014/07/12 职场文书
最新离婚协议书范本
2014/08/19 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技