我正在编写一个XML,它将成为PostScript表单的假脱机。
每当人们插入字符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
个字符。我试图用$xml
函数去除它们但似乎不起作用,因为当我插入<?xml version="1.0"?>
<xml>
<date/>
<tituloObra>áéíóúÁÉÍÓÚäëïöüÄËÏÖÜ – <= guión</tituloObra>
时,该字符已经是html-entity编码:
–
{{1}}是有问题的角色。
答案 0 :(得分:2)
EN DASH U + 2013存在于CP1252中。名称CP1252是windows-1252的常用但非官方名称,在IANA注册表中定义,因此字节0x95代表U + 2013。
答案 1 :(得分:0)
问题是与SimpleXML
有关的问题。我已经尝试了将SimpleXML转换为CP1252的所有内容,但当我在DOMDocument->loadXML
中加载它时,我总是遇到Illegal character...
错误
我已直接使用DOMDocument
类替换它,在构造函数中指定CP1252并将新记录插入UTF8
。
当我呼叫DOMDOcument->Save()
时,它会自动将文件编码为CP1252,避免PostScript
中提到的错误。