Есть ли способ в PHP для доступа к сжатым RTF и выходным RTF-кодам

Есть ли способ в PHP для доступа к сжатому RTF и вывести RTF-код в браузер?

У меня есть текстовый столбец в SQL, и я хотел бы извлечь из него RTF - мне удалось вывести данные как 0x1F8B

Я считаю, что эти данные сжаты RTF - http://www.freeutils.net/source/jtnef/rtfcompressed.jsp

Использование [MS-OXRTFCP]: алгоритм сжатия Rich Text Format (RTF) http://msdn.microsoft.com/en-us/library/cc463890%28v=exchg.80%29

Пример данных:

0x1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000

И это выглядит так, как я хочу, но его в VB http://www.vbforums.com/attachment.php?attachmentid=87371&d=1326754610

Ответ 1

Ваш образец данных - это данные gzipped, используйте gzdecode для его декодирования. Вам нужно будет передать двоичную строку, а не шестнадцатеричную строку (используйте hex2bin или pack для преобразования)

if (!function_exists(hex2bin)){
    function hex2bin($hexStr){
        return pack('H*', $hexStr);
    }
}
$rtf = gzdecode(hex2bin('1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000'));

Вот исходные данные.

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}{\f1\fnil\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\keep\keepn\sa80\cf1\f0\fs22 The moon is the brightest object in the \i\f1 Earth \i0\f0 sky?\par
\par
\cf0\par
Another question.\par
}

И это визуализированный текст.

Луна - самый яркий объект на небе Земли?

Другой вопрос.

Я не уверен, если вы хотите только raw rtf или rendered, посмотрите Бесплатный (желательно) PHP RTF в HTML-конвертер?, если вы хотите, чтобы rtf в html.

Ответ 2

Я не могу сказать вам, если

0x1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000

- это фактически сжатые данные RTF. Но если это так, Zarafa PHP MAPI Extension предлагает функцию для ее распаковки: mapi_decompressrtf().