如何用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编码,这可能是必要/有用的阅读:Better Explained (blog): Understanding Big and Little Endian Byte Order。
我试过在stackoverflow上查找其他问题,但找到了解决这个特定问题的方法,或者设法使其他任何问题都适应这个问题。任何帮助都将不胜感激!谢谢您。
最佳答案
结果发现我离得很近,最后我解决了。经验证的工作方案如下:
$sXML = pack( 'n', 0xFEFF ) . iconv( '', 'UCS-2BE', $sXML );
谢谢大家帮忙解决这个问题。
关于php - 用PHP编码为OCS-2 Big Endian的输出文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30122143/