3

エンコードが OCS-2 ビッグ エンディアンのファイルを PHP で作成するにはどうすればよいですか? 私が統合しようとしている産業用システムには、このエンコード形式が必要です。

問題を単純化するために、ファイルに書き込もうとしていたコンテンツが変数$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 ビッグ エンディアン エンコーディングに慣れていない場合は、次の記事を読むことが不可欠/役立つかもしれません: Better Explained (ブログ): Understanding Big and Little Endian Byte Order .

ここで StackOverflow の他の質問を調べてみましたが、この特定の問題の解決策を見つけたか、他の質問をこれに適応させることができました。どんな助けでも本当に感謝します! ありがとうございました。

4

1 に答える 1

0

結局のところ、私は非常に近かったので、最終的に解決しました。検証済みの実用的なソリューションは次のとおりです。

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

この問題のトラブルシューティングにご協力いただきありがとうございます。

于 2015-05-12T12:52:51.317 に答える