我正在尝试从远程位置加载XML源,因此我无法控制格式。不幸的是,我试图加载的XML文件没有编码:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <NODE> </NODE> </ROOT>
尝试类似的事情时:
$doc = new DOMDocument( );
$doc->load(URI);
我明白了:
Input is not proper UTF-8, indicate encoding ! Bytes: 0xA3 0x38 0x2C 0x38
我已经看过如何压制这个,但没有运气。我应该如何加载它以便我可以将它与DOMDocument一起使用?
答案 0 :(得分:1)
您可以编辑文档('预处理')以指定在添加XML声明时传递的编码。那是什么,当然,你必须确定自己。然后DOM对象应该解析它。
示例XML声明:
<?xml version="1.0" encoding="UTF-8" ?>
答案 1 :(得分:1)
您已将文档转换为UTF-8,最简单的方法是使用utf8_encode()。
DOMdocument示例:
$doc = new DOMDocument();
$content = utf8_encode(file_get_contents($url));
$doc->loadXML($content);
SimpleXML示例:
$xmlInput = simplexml_load_string(utf8_encode(file_get_contents($url_or_file)));
如果您不知道当前的编码,请使用mb_detect_encoding(),例如:
$content = utf8_encode(file_get_contents($url_or_file));
$encoding = mb_detect_encoding($content);
$doc = new DOMdocument();
$res = $doc->loadXML("<?xml encoding='$encoding'>" . $content);
注意:
$doc->loadHTML
重新加载html代码,您仍然可以使用XML标头。如果您知道编码,请使用iconv()进行转换:
$xml = iconv('ISO-8859-1' ,'UTF-8', $xmlInput)
答案 2 :(得分:0)
您可以尝试使用XMLReader课程。 XMLReader是专为XML设计的,可以选择使用哪种编码(包括'null'表示无)。
答案 3 :(得分:-1)
我遇到了类似的情况。我得到的是一个应该是UTF-8编码的XML文件,但它包含了一些不好的ISO字符。
我编写了以下代码来将坏字符编码为UTF-8
<?php
# The XML file with bad characters
$filename = "sample_xml_file.xml";
# Read file contents to a variable
$contents = file_get_contents($filename);
# Find the bad characters
preg_match_all('/[^(\x20-\x7F)]*/', $contents, $badchars);
# Process bad characters if some were found
if(isset($badchars[0]))
{
# Narrow down the results to uniques only
$badchars[0] = array_unique($badchars[0]);
# Replace the bad characters with their UTF8 equivalents
foreach($badchars[0] as $badchar)
{
$contents = preg_replace("/".$badchar."/", utf8_encode($badchar), $contents);
}
}
# Write the fixed contents back to the file
file_put_contents($filename, $contents);
# Cleanup
unset($contents);
# Now the bad characters have been encoded to UTF8
# It will now load file with DOMDocument
$dom = new DOMDocument();
$dom->load($filename);
?>
我在以下网址详细介绍了该解决方案: http://dev.strategystar.net/2012/01/convert-bad-characters-to-utf-8-in-an-xml-file-with-php/