我正在尝试“解码”一个XML文件(并使用XSLT对其进行转换),但我在解码这两个文件时遇到了问题。方案如下:
我有一个数据输入站点,它全部用ISO-8859-1编码(我们的Oracle数据库是那种格式,所以我无法改变它)。问题是,我有这两个文件(用于显示数据输入表单的XML和用于将其转换为HTML的XSLT)。两个文件都以ISO-8859-1编码保存,并且都有相应的标题,即。例如,每当我阅读文件并在浏览器中显示它们时,特殊字符(ñ,á,¿)将显示为UTF-8或问号(取决于我用于显示的方法),但从来不是“正常”的代表。
我显示XML文件的代码是:
<?php
$xslString = file_get_contents("catalog.xsl");
$xslString = utf8_decode($xslString);
$xslDoc = simplexml_load_string($xslString);
$xmlString = file_get_contents("questionnaire.xml");
$xmlString = utf8_decode($xmlString);
$xmlDoc = simplexml_load_string($xmlString);
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
?>
我已经尝试了DOMDocument,iconv,mb_convert_encoding的几种组合,但它们将XML文件显示为未编码的UTF,问号或双重问号。
另一方面,这也会弄乱我的数据输入,因为如果我想输入其中一个字符,它们会显示为?要么 ??在DB上的相应数据字段上,或者它们在第一个特殊字符处被截断(如果我使用iconv)。
我错过了什么?有解决方法吗?由于数据库,我无法将任何内容转换为UTF-8。
我希望我足够清楚,请原谅我的英语。
提前致谢!
答案 0 :(得分:0)
希望这有助于他人。最后,有两件事:
1)我正在阅读这样的XML / XSL文件(在我的原始脚本中):
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xmlFile);
$xmlDoc->load("xmlfile.xml");
?>
有效地将编码更改为UTF-8。我将行改为:
<?php
$xmlString = file_get_contents("xmlfile.xml");
$xmlDoc = simplexml_load_string($xmlString);
?>
删除utf_decode语句,它就像一个魅力。现在我按照他们的意图在屏幕上显示我的特殊字符。作为副作用,表单中输入的数据现在可以正确保存到我的数据库中,因此我一次性获得了两只鸟。