Php XML中的固定字符编码

Php XML中的固定字符编码,php,xml,unicode,character-encoding,postscript,Php,Xml,Unicode,Character Encoding,Postscript,我正在编写一个XML,它将成为PostScript表单的假脱机 每当人们插入字符EN-DASH(可能是从MS-Word复制的),我都会收到一个令人不快的命令:xmlerror。堆栈:尚未支持unicode… 守则的有关部分包括: $xml = new SimpleXMLElement('<xml/>'); foreach( $_POST as $key => $value ) { $xml->$key = $value: } $dom = new DOMDocu

我正在编写一个XML,它将成为PostScript表单的假脱机

每当人们插入字符EN-DASH(可能是从MS-Word复制的),我都会收到一个
令人不快的命令:xmlerror。堆栈:尚未支持unicode…

守则的有关部分包括:

$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 );

是有问题的字符。

在CP1252中存在破折号U+2013。CP1252是IANA注册表中定义的通用但非官方名称,因此字节0x95表示U+2013。

问题与
SimpleXML
有关。我尝试了将SimpleXML转换为CP1252的所有方法,但是当我在
DOMDocument->loadXML
中加载它时,我总是遇到
非法字符…
错误

我将其替换为直接使用
DOMDocument
类,在构造函数中指定CP1252并插入新记录为
UTF8

当我调用
DOMDOcument->Save()
时,它会自动将文件编码为CP1252,避免了
PostScript
中提到的错误

<?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>