Как я могу написать файл на PHP, который имеет кодировку OCS-2 Big Endian? Промышленная система, с которой я пытаюсь интегрироваться, требует этот формат кодирования.
Чтобы упростить проблему, предположим, что содержимое, которое я пытался записать в файл, было сохранено в переменной $ SXPath,, в этом случае содержимое 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.
Если вы не знакомы с кодировкой Big Endian OCS-2, это может оказаться полезным / полезным чтением: Объяснение лучше (блог): Понимание старшего и младшего байтового порядка.
Я пытался просмотреть другие вопросы здесь, на StackOverflow, но нашел решение этой конкретной проблемы, или мне удалось адаптировать другие вопросы к этому. Любая помощь могла бы быть полезна! Спасибо.
Как оказалось, я был очень близок, и в конце концов я решил это. Проверенное рабочее решение выглядит следующим образом:
$sXML = pack( 'n', 0xFEFF ) . iconv( '', 'UCS-2BE', $sXML );
Спасибо всем за помощь в устранении этой проблемы.
Других решений пока нет …