PHP DOMDocument保存xml时中文出现乱码

PHP的DOM内部是utf8机制的。在loadHTML时,是通过检查字符中meta的charset来设置编码的。如果没有charset,就当iso8859进行处理了。而这种情况下进行saveXML时,输出来的却是utf8,所以就看到乱码了。

这么说是不是还不太理解,举个例子:

$xml = new DOMDocument();
@$xml->loadHTML('<div>我就是测试看看 - http://www.111cn.net</div>');
 
$dom = new DOMXPath($xml);
echo $dom->query('//div')->item(0)->saveXML();

打开网页执行,你会发现输出乱码了。那如何解决这个问题呢?有两种方式。

第一种:在loadHTML的时候指定编码,下面这段代码引用自php.net官方文档中的回复

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);
 
// dirty fix
foreach ($doc->childNodes as $item)
    if ($item->nodeType == XML_PI_NODE)
        $doc->removeChild($item); // remove hack
$doc->encoding = 'UTF-8'; // insert proper

第二种方法,通过iconv对输出的字符重新转换,代码如下:

echo iconv("UTF-8", "GB18030//TRANSLIT", $dom->saveXML($n) );

时间: 2024-09-23 12:40:36

PHP DOMDocument保存xml时中文出现乱码的相关文章

PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案_php实例

php中DOMDocument对于xml操作我们只要是英文是没有问题了,但如果是中文字体就会有乱码问题了,下面我们就此问题给各位介绍一些解决办法吧. PHP的DOM内部是utf8机制的,在loadHTML时,是通过检查字符中meta的charset来设置编码的,如果没有charset,就当iso8859进行处理了,而这种情况下进行saveXML时,输出来的却是utf8,所以就看到乱码了. 这么说是不是还不太理解,举个例子: $xml = new DOMDocument(); @$xml->loa

PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案

php中DOMDocument对于xml操作我们只要是英文是没有问题了,但如果是中文字体就会有乱码问题了,下面我们就此问题给各位介绍一些解决办法吧. PHP的DOM内部是utf8机制的,在loadHTML时,是通过检查字符中meta的charset来设置编码的,如果没有charset,就当iso8859进行处理了,而这种情况下进行saveXML时,输出来的却是utf8,所以就看到乱码了. 这么说是不是还不太理解,举个例子: $xml = new DOMDocument(); @$xml->loa

CAS登陆验证后查询用户基本信息时中文出现乱码,导致deployerConfigContext.xml报错

问题描述 CAS登陆验证后查询用户基本信息时中文出现乱码,导致deployerConfigContext.xml报错是在验证用户名密码正确后查询用户基本信息时,用户真实姓名是中文查询出来是乱码报错:严重:org.xml.sax.SAXParseException:Theelementtype"cas:userRealName"mustbeterminatedbythematchingend-tag"</cas:userRealName>".org.xml

通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件(要注意的是生成xml格式要是2003格式的xml,也就是说拿到的word模板得是2003格式的,否则用wps打开word将会出现问题)   详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(si

中文乱码-pb9创建菜单时中文名字乱码

问题描述 pb9创建菜单时中文名字乱码 在PowerBuilder9上创建menu时出现中文名字的乱码现象

jsp到 url时中文出现乱码

jsp教程到a url时中文出现乱码 先在jsp编码,再在action中解码 encodeURI(encodeURI("中文"))编码 URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码. 例如:  url:"qtypenums.action?typeid=<s:property value='typeid'  escape='false'/>&qm

linux操作系统下从其他服务器获取的xml字符串中文为乱码,在本地无法解析

问题描述 一个javaweb项目部署在一台服务器上,服务器采用的是linux操作系统,调用其他公司提供的webservice接口获取到一个xml的字符串,然后使用dom在本地解析,得到的字符串是乱码,请问高手们这个问题怎么解决.publicstaticList<Product>readProductDomXml(Stringstr)throwsException{List<Product>products=newArrayList<Product>();Document

Edit4.0编码为UTF-8中文为乱码

问题描述 Edit4.0编码为UTF-8中文为乱码 记事本保存为UTF-8中文为乱码,ANSI正常,Editplus4.0 UTF-8中文乱码,如何设置为ANSI. 解决方案 试试:Tools => preferences => Files => Default Encoding

dom4j写xml时&amp;amp;amp;会被转义成&amp;amp;amp;amp;的解决方法?

问题描述 我通过dom4j生产xml文档时,如果我的文档里面有&.<等特殊字符的话,则会对其进行转义,有什么方法可以避免吗?原来的:<?xml version="1.0" encoding="ISO8859_1"?><QUERY name="query" bo="project_versions"> <ITEMS name="columns"> <CO