如何用PHP编写编码为OCS-2 Big Endian的文件?我尝试与之集成的工业系统需要此编码格式。
为了简化问题,假设我要写入文件的内容存储在变量$ sXML中,在这种情况下,XML内容的XML头中已设置了编码:
$sXML = '<?xml version="1.0" encoding="utf-16BE"?>';
$sXML .= '<envelope><node>1</node><node>2</node><node>3</node></envelope>';
/* Insert solution here */
file_put_contents( 'filename.xml', $sXML );
到目前为止,我已经尝试过例如:
$sXML = iconv( '', 'UCS-2BE', $sXML );
$sXML = html_entity_decode( htmlentities( $sXML, ENT_QUOTES, 'Windows-1252' ), ENT_QUOTES, 'UCS-2BE' );
$sXML = mb_convert_encoding( $sXML, 'UCS-2BE', 'HTML-ENTITIES' );
尽管所有这些都破坏了Notepad ++中生成的文件的可读性,但没有一个导致文件编码设置为UCS-2BE。
如果您不熟悉OCS-2 Big Endian编码,这可能是必不可少的/有帮助的阅读:更好的解释(博客):了解Big Endian和Little Endian字节顺序。
我试着在StackOverflow上浏览其他问题,但是找到了解决该特定问题的解决方案,或者设法使其他任何问题都适应了这一问题。任何帮助将非常感激!谢谢你。
事实证明,我非常亲密,最终我找到了答案。经验证的工作解决方案如下:
$sXML = pack( 'n', 0xFEFF ) . iconv( '', 'UCS-2BE', $sXML );
谢谢大家对解决此问题的帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句