php加载xml编码错误,“Error: Input is not proper UTF-8, indicate encoding! ”

最近在给php中解析xml的时候,抛出一个错误:

"Warning: DOMDocument::load(): Input is not proper UTF-8, indicate encoding ! Bytes: 0xBB 0xB6 0xD3 0xAD in file:/E:/phpWork/ShopProject/SendCMS.xml, line: 19 inE:\phpWork\ShopProject\xml.php on line 4"

意思是说DOMDocument的load函数在load的时候出现错误,然后我查看了我的xml文件,文件如下

 1 <?xml version="1.0" ?>
 2 <Package>
 3 <Header>
 4 <RoadNo>12345</RoadNo>
 5 <DataType>48</DataType>
 6 <ModuleNO>12345</ModuleNO>
 7 <SourceIP>127.0.0.1</SourceIP >
 8 <SourcePort>11000</SourcePort >
 9 <UserID>96998</UserID>
10 <RecordTime>2014-11-19 08:08:08:111</RecordTime>
11 <Imperative>1</Imperative>
12 <Result  Flag="-1" Msg=" " />
13 </Header>
14 <DeviceList>
15 <DevItem DeviceID="5100001"/>
16 <DevItem DeviceID="5100002"/>
17 </DeviceList>
18 <VisionData>
19 <VisionItem TextInfo="欢迎驶入" PicNo="" FontName="宋体" FontSize="10" FontColor="黄" FontFormat="居中" Interval="100" Effect="1" />
20 <VisionItem TextInfo="减速慢行" PicNo="" FontName="宋体" FontSize="10" FontColor="黄" FontFormat="居中" Interval="100" Effect="1" />
21 </VisionData >
22 </Package>

SendCMS.xml

然后发现类型定义没有定义encoding,这里我猜是因为有汉字,所以默认为utf-8编码,然后我就在网上找方法,果真,在stack over flow中找到了一个方法,分别如下

方法1:

解决方案:读取文本内容,然后将文本内容进行编码转换,用iconv函数来进行转换,具体的代码如下

//读取文件内容
$myfile = fopen("SendCMS.xml",‘r‘);
$content = fread($myfile,filesize("SendCMS.xml"));
fclose($myfile);

$content = iconv(‘UTF-8‘, ‘UTF-8//IGNORE‘, $content);
$xmldoc -> loadXML($content );
print $xmldoc->saveXML();

方法1,采用iconv函数

总体来说,这个解决方案都不错,可以采用。

原文地址:Stack OverFlow

时间: 2024-10-12 22:59:33

php加载xml编码错误,“Error: Input is not proper UTF-8, indicate encoding! ”的相关文章

(Spring加载xml时)org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element &#39;beans&#39;.

ApplicationContext ctx = new ClassPathXmlApplicationContext("test.xml");报错 在启动Spring时,报以下错误,如图: 原因是在xml中spring的xsd的版本配置的不一致,我使用的是spring-2.5.6,但配置文件中配的是3.0.改成如下即可: [xhtml] view plain copy <?xml version="1.0" encoding="UTF-8"

js加载xml文件xin

js加载xml文件 作为刚进入软件开发大军的我,以一个水军的资格开始做梦,以一个画者的资格在'一张白纸'上开始涂抹.工作在哪里??工作在哪里呢??? 今天发现一道面试题: 附件中有一个城市列表的city.xml文件,现在需要您通过Javascript脚本对该文件进行解析,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息(界面布局请参考test1.html文件,也可以自行定义). 上网查了一天的资料,绞尽脑汁的试着网上前辈的各种方法,为什么一个个别人成功的案例,

跨浏览器加载xml文件

var parseXml = { createXmlParser: function () { //IE创建此解析对象 var versions = [ 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; var xmlParse = null; for (var i = 0, length = versions.length; i < length; i++) { try { xmlParse

Android动态加载XML文件及控件来简单实现QQ好友印象的功能

在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态加载控件来简单实现QQ中好友印象的功能,其中也会提到如何来动态加载一个XML的配置文件. 那么要实现好友印象的功能,我们需要通过以下这几个步骤: 1.界面一开始需要加载一个EditText和Button控件,用于填写好友印象和添加好友印象: 2.需要新建一个arrays.xml,在xml文件中添加上

Spring中加载xml配置文件的六种方式

因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装入系统,这就需要利用Spring去动态加载某一位置下的配置文件,所以就总结了下Spring中加载xml配置文件的方式,我总结的有6种, xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括: XmlBeanFactory,ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,XmlWebApplicati

遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析

开发的机器,系统情况如下: 1.server 2003 sp2 x86 2.补丁安装360 3.升级到IE8 因为担心server 2003 sp2 不能够自动update,最近都是用360打补丁,比较快,但是问题很多,首先是.NET 2.0 SP2的更新会引起IIS6.0 的崩溃,然后就是SQL SERVER 2005 MANAGEMENT STUDIO 的启动失败,又不想重装系统,找了很多的工具,最重要的windows installer clean up.cleanup_tool,步骤如下

Spring 加载xml配置文件的方式 ApplicationContext

大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件的呢? 这就要靠IoC容器的两个接口BeanFactory 和ApplicationContext: BeanFactory (接口) |--------XmlBeanFactory(实现类) ApplicationContext (接口) |-------- ClassPathXmlApplicatio

js便签笔记(8)——js加载XML字符串或文件

1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open("GET", "data.xml", false); xhr.send(null); var xmlDoc = xhr.responseXML; console.log(xmlDoc

mybatis加载xml配置文件

<build>     <finalName>bizcloud-tcb2b</finalName>     <!-- mybatis加载xml配置文件的配置  -->     <resources>         <resource>             <directory>src/main/java</directory>             <includes>