`
mugicoffee
  • 浏览: 36768 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

XML和PHP的中文显示问题

阅读更多
解决了数据库的中文显示问题,现在又换成了XML文件了。
本来是想用XML存储部分文字信息,这部分信息更改没有数据库里频繁,所以想用XML文件来存储。由于前面的网页和MYSQL里的字符编码制指定的都是gb2312,所以在新建的XML文件开头里就指定编码:
文件:board.xml  
  公告信息1
  admin 
  公告信息2
  管理员
 
 
同时另写了一个读取php程序,用DOM读取:
  $doc = new DOMDocument();
  $doc->load('board.xml' );
 
 $infors = $doc->getElementsByTagName("information" );
  foreach( $inforsas $infor )
  {
  $values = $infor->getElementsByTagName("value");
  $value = $values->item(0)->nodeValue;
 
  $authors =$infor->getElementsByTagName("author" );
  $author =$authors->item(0)->nodeValue;
  echo"$value - $author \n";
 }
?>
用IE打开,结果是乱码,但是把网页编码调成UTF-8才可以正常显示。这下就奇怪了,等我把XML文件里的encoding这个属性去掉,发现默认的浏览器编码就是UTF-8。这下有点麻烦了。之前我也说过了,一开始我就把网页和数据库的编码设成了GB2312,这下可好,从XML读出来的是UTF-8,网页成混合乱码了。
 
当时还想,也许是因为使用DOM库的原因,也许DOM库不支持GB2312,也许不见得所有读取XML文件的所有方法都不支持GB2312。随后我又写了个PHP程序,这次不调用DOM库,改用php里自带的parser,说不定能实现呢。
$parser = xml_parser_create();//创建一个parser编辑器
xml_set_element_handler($parser,"startElement","endElement");//设立标签触发时的相应函数这里分别为startElement和endElenment
xml_set_character_data_handler($parser,"characterData");//设立数据读取时的相应函数
$xml_file='board.xml';//指定所要读取的xml文件,可以是url
if(!($fp = fopen($xml_file,"r"))) {
    die("could not open XMLinput");
}
$filehandler = fopen($xml_file,"r");//打开文件
$name=false;
$position=false;
while ($data =fread($filehandler, 4096))
{
    xml_parse($parser, $data,feof($filehandler));
     if (!xml_parse($parser, $data, feof($filehandler))){
        die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($parser)),
                   xml_get_current_line_number($parser)));
    }
   
}//每次取出4096个字节进行处理
fclose($filehandler);
xml_parser_free($parser);//关闭和释放parser解析器
function startElement($parser_instance, $element_name, $attrs)       //起始标签事件的函数
 {
   global $name,$position; 
  if($element_name=="author")
   {
   $name=true;
  $position=false;
   echo"名字:";
  }
  if($element_name=="value")
  {$name=false;
   $position=true;
   echo"信息:";
  }
}
function characterData($parser_instance, $xml_data)                 //读取数据时的函数
{
   global $name,$position;
   if($position)
    echo$xml_data."
";
    if($name)
     echo$xml_data."
";
}
function endElement($parser_instance, $element_name)                //结束标签事件的函数
{
 global $name,$position;
$name=false;
$position=false; 
}
?>

结果还是只能用UTF-8编码来看结果。
 
后来GOOGLE了一下,有人说XML默认的是UTF-8,如果想用gb2312,只能把这个XML在中文内核下存成gb2312内码的文件,然后再读取。可我的WINXP是通过装语言包才导入的中文输入,看来只能用UTF-8了。如果想用gb2312的话,只能把要存到XML文件的信息改存到database里,这个又达不到练习的效果。
后来想了想,还是把所有的网页都改成UTF-8编码得了。这个工程就浩大了。
 
先是把程序里指定HTML语句中charset全改掉,接着一运行,还是发现就算是在HTML网页里输出的汉字还是原来的编码,找了半天也没查出原因了。
后来疑心是用UltraEdit编辑php文件保存的编码不对,因为是从某个从网上下的php文件更改来起步学习的。后来都在UltraEdit里重新复制编辑后,还是没能解决这个问题。
无奈之下,只好打开记事本,一个一个文件复制,最后存成UTF-8的格式,累死我了,一共二十多个文件啊。
只对在php程序里修改还不够,还要对mysql里的各个table里设的charset也要修改。
好不容易修改完,一运行,结果出现了一个Warning,吐血了要……
[start_session()]Warning:Cannot send session cache limiter - headersalready sent
这是虾米毛病啊?!
只好再次求助GG大婶。
据说有两个原因会造成这个warning的出现
 
第一,
The PHP function such as headers(), used with start_session(), producesHTML headers. When the PHP fragments are placed in the body of the HTML, thiscauses errors because the PHP fragments are trying to put HTML headers withinthe HTML body. Solution:Put the PHP fragments before the HTML body tag.
(link:http://parallel.hpc.unsw.edu.au/~chee/IdiotErrors/node9.html
可我的start_session()绝对是在head tag之前就调用了,应该不是上面这个原因。
 
第二,
引用了UTF-8格式的文件,有些UTF-8格式的文件會在文件的開始放入判斷字元(BOM),可以啟用PHP.INI的設定 output_buffering= 4096
(link:http://info.mysql.cn/php/2006/0323/5499.html
我打开php.ini一看,里面默认的值是off,更改,保存,重启apache服务器,刷新网页,果然是这个原因!
 
最后虽然解决了,可还是半喜半忧。这个程序本来是要放在某些带php和mysql免费空间的,肯定没有权限更改php.ini文件。万一对方不支持,也只能用gb2312了……

 
 
分享到:
评论

相关推荐

    XML 讲解和分析

    因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (www.w3.org/TR/WD-xml)。因为XML 是个公共格式, ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    这是一个质的区别:网页将数据和显示混在一起,而XML则将数据和显示分开来。 我们看上面的例子,在myfile.htm中,我们只关心页面的显示方式,我们可以设计不同的界面,用不同的方式来排版页面,但数据是储存在...

    php的webservice的wsdl的XML无法显示问题的解决方法

    php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++ 转码即可 以UTF-8无BOM编码 您可能感兴趣的文章:JAVA如何调用wsdl过程详解java WSDL接口webService实现方式PHP调用wsdl文件类型的接口代码分享...

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP XML转数组函数 PHP 缓存函数 PHP 设置COOKIE,并且加密COOKIE函数 PHP不缓存数据头 PHP伪造IP PHP全角半角转换函数 PHP农历函数 PHP分页函数 PHP...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程59:关于BIWEB常见问题和结构分析 PHP100视频教程60:PHP与数据库代码开发规范 PHP100视频教程61:PHP+Mysql新闻系统的开发一 PHP100视频教程62:PHP+Mysql新闻系统的开发二 PHP100视频教程63:...

    EclipsePHP Studio 1.2.2 ( EPP) 简体中文版.rar

     1、修正编写PHP代码时行号不能正常显示每次打开丢失问题  2、增加了在EPP中直接打开文件目录方便操作。  3、解决了在Vista 、Windows7 中假死的问题。  4、重新修正了PHP支持内核反应速度更快  5、去除了...

    php课程(共100多节)

    59:关于BIWEB常见问题和结构分析 60:PHP与数据库代码开发规范 61:PHP+Mysql新闻系统的开发一 62:PHP+Mysql新闻系统的开发二 63:PHP+Mysql新闻系统的开发三 64:PHP+Mysql新闻系统的开发四 65:PHP+Mysql新闻...

    PHP+Ajax网站开发典型实例

    实例3 中文时间显示实例 实例4 删除字符串中的空白 实例5 字符串反转 实例6 字符串加密 实例7 检查日期的有效性 实例8 简单猜数游戏 实例9 验证信用卡号 实例10 计算两个数组并、交和差 实例11 数组排序 第...

    PHP+Ajax网站开发典型实例-源代码

    实例3 中文时间显示实例 实例4 删除字符串中的空白 实例5 字符串反转 实例6 字符串加密 实例7 检查日期的有效性 实例8 简单猜数游戏 实例9 验证信用卡号 实例10 计算两个数组并、交和差 实例11 数组排序 第2章 PHP...

    Codelobster PHP Edition 5.0.2中文注册版.rar

    Codelobster PHP Edition是一款专业的PHP开发工具,它拥有包括开发PHP所有的功能,先进的查找及替换功能,支持代码高亮显示,智能自动完成PHP代码,包括PHP/HTML/XML代码分析工具,丰富的功能可以帮你快速创建PHP...

    PHP jqGrid 数据网格显示并分页

    jqGrid 是一个用来显示网格数据的jQuery插件,文档比较全面,附带中文版本。 主要特点: -Full control with JavaScript API -Data returned from the server is XML -Simple configuration -Ability to load big ...

    PHP实现高度自定义的微信机器人

    PHP SimpleXML 拓展 解析XML 安装 请确保已经会使用composer! 运行微信账号的语言设置务必设置为简体中文!!否则可能出现未知的错误! 1、git git clone https://github.com/HanSon/vbot.git cd vbot composer...

    php网络开发完全手册

    12.6 JavaScript和PHP的综合实例——表单 12.6 验证 197 12.6.1 表单设计 197 12.6.2 JavaScript代码设计 199 12.6.3 PHP代码设计 200 12.6.4 代码的运行 201 12.7 小结 202 第2篇 PHP与数据库 第13章 关系型数据库...

    PHP开发实战1200例源码

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则...

    优秀代码编辑器工具 PhpDesigner 8.1.2 Portable 绿色中文免费版.zip

    2.支持PHP,HTML, CSS, JavaScript等phpDesigner不仅是一个功能强大的PHP IDE和编辑器还是一个HTML, XHTML, MySQL,XML, CSS, JavaScript, Smarty, VBScript, Java, C#, Perl, Python,Ruby编辑器! 3.智能化语法加亮...

    NewvBB Core 1.0 Final (vBulletin 简体中文化插件版)

    本软件包内提供的一切汉化文件、论坛插件和风格文件(包括 vbulletin-adminhelp.xml,vbulletin-language.xml,vbulletin-settings.xml 和 vbulletin-style.xml 等),版权均归 NewvBB.com 所有。可以免费使用,但是...

    phpDesigner_8.1.0.10 含注册码

    phpdesigner 不仅支持php ,也支持其他网络语言像html ,xhtml, xml,css和javascript , vbscript,java, c #,perl , python等! 由于可以搭配使用的相关免费资源相当的多,PHP 的网页设计越来越多人在学习...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...

    phpdesigner v8.1.2

    phpdesigner 不仅支持php ,也支持其他网络语言像html ,xhtml, xml,css和javascript , vbscript,java, c #,perl , python等!由于可以搭配使用的相关免费资源相当的多,PHP 的网页设计越来越多人在学习了,...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...

Global site tag (gtag.js) - Google Analytics