2014-02-14 78 views
1

我在寫一個XML,它將成爲PostScript表單的後臺處理程序。修復XML中的字符編碼

每當人們插入字符EN DASH(可能複製形式的MS Word),我得到一個offending command: xmlerror. Stack: unicode not supported yet ....

http://www.fileformat.info/info/unicode/char/2013/index.htm

代碼的相關部分是:

$xml = new SimpleXMLElement('<xml/>'); 
foreach($_POST as $key => $value) { 
    $xml->$key = $value: 
} 
$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($xml->asXML()); 
$nombreArchivoTemporal = '/tmp/'.time().rand(); 
$archivo = fopen ($nombreArchivoTemporal, "wb"); 
fwrite ($archivo, iconv('UTF-8', 'CP1252//TRANSLIT//IGNORE', "@PBSSFORM DNDA\n" . $dom->saveXML())); 
fclose ($archivo); 

事實是ÄËÏÖÜáéíóú, etc字符是支持的,但EN DASH和其他人可能不支持。我試圖獲得與iconv功能擺脫他們,但似乎並沒有工作,因爲性格已經是HTML的實體,當我在$xml插入編碼:

<?xml version="1.0"?> 
<xml> 
<date/> 
    <tituloObra>&#xE1;&#xE9;&#xED;&#xF3;&#xFA;&#xC1;&#xC9;&#xCD;&#xD3;&#xDA;&#xE4;&#xEB;&#xEF;&#xF6;&#xFC;&#xC4;&#xCB;&#xCF;&#xD6;&#xDC; &#x2013; &lt;= gui&#xF3;n</tituloObra> 

&#x2013;是存在問題的字符。

回答

0

那麼這個問題與SimpleXML有關。我用盡了一切的SimpleXML的轉換爲CP1252,但是當我加載它在DOMDocument->loadXML,我總是得到Illegal character...錯誤

我已經取代它直接使用DOMDocument類,在構造函數中指定CP1252和插入新記錄作爲UTF8

當我呼叫DOMDOcument->Save()時,它自動將文件編碼爲CP1252,避免了PostScript中提到的錯誤。

2

EN DASH U + 2013存在於CP1252中。名稱CP1252是通用名稱,但在IANA註冊管理機構中定義了windows-1252的非官方名稱,因此字節0x95表示U + 2013。