簡體   English   中英

在PHP中將XML從UTF-8解碼為ISO-8859-1

[英]Decoding XML from UTF-8 to ISO-8859-1 in PHP

我正在嘗試“解碼” XML文件(並使用XSLT對其進行轉換),但是在解碼兩個文件時遇到了麻煩。 場景如下:

我有一個用於數據輸入的站點,所有站點均以ISO-8859-1編碼(我們的Oracle數據庫為該格式,因此無法更改)。 問題是,我有那兩個文件(一個XML來顯示數據輸入表單,一個XSLT來將其轉換為HTML)。 這兩個文件均以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,問號或雙問號。

另一方面,這也弄亂了我的數據輸入,因為如果我想輸入這些字符之一,它們要么顯示為? 要么 ?? 在數據庫上相應的數據字段上,否則它們會在第一個特殊字符處被截斷(如果我使用iconv的話)。

我想念什么? 有解決方法嗎? 由於數據庫的原因,我無法將任何內容轉換為UTF-8。

我希望我已經足夠清楚了,請原諒我的英語。

提前致謝!

希望這對其他人有幫助。 最后,有兩件事:

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語句,它就像一個魅力。 現在,我可以按預期在屏幕上顯示特殊字符。 副作用是,現在在表格中輸入的數據已正確保存到我的數據庫中,因此我一槍打了兩只鳥。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM