3

如何在 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 );

到目前为止,我已经尝试过,例如:

  1. $sXML = iconv( '', 'UCS-2BE', $sXML );
  2. $sXML = html_entity_decode( htmlentities( $sXML, ENT_QUOTES, 'Windows-1252' ), ENT_QUOTES, 'UCS-2BE' );
  3. $sXML = mb_convert_encoding( $sXML, 'UCS-2BE', 'HTML-ENTITIES' );

尽管所有这些都破坏了 Notepad++ 生成文件的人类可读性,但它们都不会导致文件编码设置为 UCS-2BE。

如果您不熟悉 OCS-2 Big Endian 编码,这可能证明是必不可少的/有帮助的阅读:更好的解释(博客):了解 Big Endian 和 Little Endian 字节顺序

我已经尝试在 StackOverflow 上查看其他问题,但找到了解决这个特定问题的方法,或者设法使其他任何问题适应这个问题。任何帮助将非常感激!谢谢你。

4

1 回答 1

0

事实证明,我非常接近,最终我解决了。经验证的工作解决方案如下:

$sXML = pack( 'n', 0xFEFF ) . iconv( '', 'UCS-2BE', $sXML );

感谢大家帮助解决此问题。

于 2015-05-12T12:52:51.317 回答