解决了数据库的中文显示问题,现在又换成了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之前就调用了,应该不是上面这个原因。
我打开php.ini一看,里面默认的值是off,更改,保存,重启apache服务器,刷新网页,果然是这个原因!
最后虽然解决了,可还是半喜半忧。这个程序本来是要放在某些带php和mysql免费空间的,肯定没有权限更改php.ini文件。万一对方不支持,也只能用gb2312了……
分享到:
相关推荐
因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (www.w3.org/TR/WD-xml)。因为XML 是个公共格式, ...
这是一个质的区别:网页将数据和显示混在一起,而XML则将数据和显示分开来。 我们看上面的例子,在myfile.htm中,我们只关心页面的显示方式,我们可以设计不同的界面,用不同的方式来排版页面,但数据是储存在...
php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++ 转码即可 以UTF-8无BOM编码 您可能感兴趣的文章:JAVA如何调用wsdl过程详解java WSDL接口webService实现方式PHP调用wsdl文件类型的接口代码分享...
GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP XML转数组函数 PHP 缓存函数 PHP 设置COOKIE,并且加密COOKIE函数 PHP不缓存数据头 PHP伪造IP PHP全角半角转换函数 PHP农历函数 PHP分页函数 PHP...
PHP100视频教程59:关于BIWEB常见问题和结构分析 PHP100视频教程60:PHP与数据库代码开发规范 PHP100视频教程61:PHP+Mysql新闻系统的开发一 PHP100视频教程62:PHP+Mysql新闻系统的开发二 PHP100视频教程63:...
1、修正编写PHP代码时行号不能正常显示每次打开丢失问题 2、增加了在EPP中直接打开文件目录方便操作。 3、解决了在Vista 、Windows7 中假死的问题。 4、重新修正了PHP支持内核反应速度更快 5、去除了...
59:关于BIWEB常见问题和结构分析 60:PHP与数据库代码开发规范 61:PHP+Mysql新闻系统的开发一 62:PHP+Mysql新闻系统的开发二 63:PHP+Mysql新闻系统的开发三 64:PHP+Mysql新闻系统的开发四 65:PHP+Mysql新闻...
实例3 中文时间显示实例 实例4 删除字符串中的空白 实例5 字符串反转 实例6 字符串加密 实例7 检查日期的有效性 实例8 简单猜数游戏 实例9 验证信用卡号 实例10 计算两个数组并、交和差 实例11 数组排序 第...
实例3 中文时间显示实例 实例4 删除字符串中的空白 实例5 字符串反转 实例6 字符串加密 实例7 检查日期的有效性 实例8 简单猜数游戏 实例9 验证信用卡号 实例10 计算两个数组并、交和差 实例11 数组排序 第2章 PHP...
Codelobster PHP Edition是一款专业的PHP开发工具,它拥有包括开发PHP所有的功能,先进的查找及替换功能,支持代码高亮显示,智能自动完成PHP代码,包括PHP/HTML/XML代码分析工具,丰富的功能可以帮你快速创建PHP...
jqGrid 是一个用来显示网格数据的jQuery插件,文档比较全面,附带中文版本。 主要特点: -Full control with JavaScript API -Data returned from the server is XML -Simple configuration -Ability to load big ...
PHP SimpleXML 拓展 解析XML 安装 请确保已经会使用composer! 运行微信账号的语言设置务必设置为简体中文!!否则可能出现未知的错误! 1、git git clone https://github.com/HanSon/vbot.git cd vbot composer...
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章 关系型数据库...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则...
2.支持PHP,HTML, CSS, JavaScript等phpDesigner不仅是一个功能强大的PHP IDE和编辑器还是一个HTML, XHTML, MySQL,XML, CSS, JavaScript, Smarty, VBScript, Java, C#, Perl, Python,Ruby编辑器! 3.智能化语法加亮...
本软件包内提供的一切汉化文件、论坛插件和风格文件(包括 vbulletin-adminhelp.xml,vbulletin-language.xml,vbulletin-settings.xml 和 vbulletin-style.xml 等),版权均归 NewvBB.com 所有。可以免费使用,但是...
phpdesigner 不仅支持php ,也支持其他网络语言像html ,xhtml, xml,css和javascript , vbscript,java, c #,perl , python等! 由于可以搭配使用的相关免费资源相当的多,PHP 的网页设计越来越多人在学习...
本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...
phpdesigner 不仅支持php ,也支持其他网络语言像html ,xhtml, xml,css和javascript , vbscript,java, c #,perl , python等!由于可以搭配使用的相关免费资源相当的多,PHP 的网页设计越来越多人在学习了,...
本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...