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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
php简单分页类实现方法
Feb 26 PHP
PHP页面转UTF-8中文编码乱码的解决办法
Oct 20 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
php实现的操作excel类详解
Jan 15 PHP
php面向对象重点知识分享
Sep 27 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
使用PHP开发留言板功能
Nov 19 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 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
E路文章系统PHP
2006/12/11 PHP
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
学习ExtJS border布局
2009/10/08 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
使用pip发布Python程序的方法步骤
2018/10/11 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
Python如何对齐字符串
2020/07/30 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
关于毕业的广播稿
2014/01/10 职场文书
初一体育教学反思
2014/01/29 职场文书
学习两会精神心得范文
2014/03/17 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
财务人员担保书
2014/05/13 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python