用PHP编码为OCS-2 Big Endian的输出文件

里奇霍尔斯托克

如何用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上浏览其他问题,但是找到了解决该特定问题的解决方案,或者设法使其他任何问题都适应了这一问题。任何帮助将非常感激!谢谢你。

里奇霍尔斯托克

事实证明,我非常亲密,最终我找到了答案。经验证的工作解决方案如下:

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

谢谢大家对解决此问题的帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章