PHP 中的输出文件编码为 OCS-2 Big Endian
Output file in PHP encoded as OCS-2 Big Endian
如何在 PHP 中写入编码为 OCS-2 Big Endian 的文件?我尝试集成的工业系统需要这种编码格式。
为了简化问题,假设我试图写入文件的内容存储在变量 $sXML 中,在本例中为 XML XML header 中编码设置的内容准备就绪:
$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++ 中生成的文件的人类可读性,但其中 none 导致文件编码被设置为 UCS-2BE。
如果您不熟悉 OCS-2 Big Endian 编码,这可能被证明是 essential/helpful 阅读:Better Explained (blog): Understanding Big and Little Endian Byte Order.
我已经尝试在 Whosebug 上查看其他问题,但找到了解决这个特定问题的方法,或者设法使其他任何问题适应这个问题。任何帮助将非常感激!谢谢。
事实证明我非常接近,最终我解决了。验证有效的解决方案如下:
$sXML = pack( 'n', 0xFEFF ) . iconv( '', 'UCS-2BE', $sXML );
感谢大家帮助解决这个问题。
如何在 PHP 中写入编码为 OCS-2 Big Endian 的文件?我尝试集成的工业系统需要这种编码格式。
为了简化问题,假设我试图写入文件的内容存储在变量 $sXML 中,在本例中为 XML XML header 中编码设置的内容准备就绪:
$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++ 中生成的文件的人类可读性,但其中 none 导致文件编码被设置为 UCS-2BE。
如果您不熟悉 OCS-2 Big Endian 编码,这可能被证明是 essential/helpful 阅读:Better Explained (blog): Understanding Big and Little Endian Byte Order.
我已经尝试在 Whosebug 上查看其他问题,但找到了解决这个特定问题的方法,或者设法使其他任何问题适应这个问题。任何帮助将非常感激!谢谢。
事实证明我非常接近,最终我解决了。验证有效的解决方案如下:
$sXML = pack( 'n', 0xFEFF ) . iconv( '', 'UCS-2BE', $sXML );
感谢大家帮助解决这个问题。