2014-02-14 4 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 является обычным, но неофициальным именем для windows-1252, которое определено в реестре IANA, так что байт 0x95 представляет U + 2013.

Смежные вопросы