【问题标题】:Is there a way in PHP to access compressed RTF and output RTF codePHP中有没有办法访问压缩的RTF并输出RTF代码
【发布时间】:2018-03-18 13:28:44
【问题描述】:

PHP 中有没有办法访问压缩的 RTF 并将 RTF 代码输出到浏览器?

我在 SQL 中有一个文本列,我想从中提取 RTF - 我已设法将数据输出为 0x1F8B

我相信这些数据是压缩的 RTF - http://www.freeutils.net/source/jtnef/rtfcompressed.jsp

使用 [MS-OXRTFCP]:富文本格式 (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

【问题讨论】:

  • 只要“压缩的 RTF”具有无损压缩(这有意义),就有一种方法可以访问压缩的 RTF 并将其作为未压缩的 RTF 输出。方法是解压。这能回答你的问题吗?
  • 我试过 gzdeflate 并得到了 U'¹ D1D[ÌaBsõ_ÒòÃ%ABˆy3àÜ€¥Â}P;ÏÈNÉ6 ¥¯¼Pé6ø

标签: php rtf


【解决方案1】:

您的数据样本是压缩后的数据,请使用gzdecode 对其进行解码。您需要传递二进制字符串而不是提供的十六进制字符串(使用 hex2binpack 进行转换)

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's \i0\f0 sky?\par
\par
\cf0\par
Another question.\par
}

这是渲染的文本。

月亮是地球天空中最亮的物体吗?

另一个问题。

我不确定您是否只想要原始 rtf 或渲染,如果您想要 html 中的 rtf,请查看 Free (preferably) PHP RTF to HTML converter?

【讨论】:

  • 进展顺利。希望你得到赏金:)
  • 天啊,太棒了! - 这个问题的赏金消失了 - 我想奖励给你 - 我可以重新分配吗?
【解决方案2】:

我不能告诉你是否

0x1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000

实际上是压缩的RTF数据。但如果是这样,Zarafa's PHP MAPI Extension 提供了一个解压缩函数:mapi_decompressrtf()

【讨论】:

  • 我看到了,但是 - 没有看到它的下载?
  • 你可以在这里找到它:git.zarafa.com/zcp/zcp/trees/master/php-ext / git://git.zarafa.com/zcp/zcp.git
  • @Rob:您是否正在寻找非二进制解决方案来解决您的问题?您可以为 PHP 移植投入多少时间?
  • 我正在寻找一个非二进制解决方案(访问现有数据库的网站)-该解决方案是一项创新,因此目前没有太多支持但需要大量时间(没有 $$)-但是如果我们真的继续,那可能会非常好
  • 我将从解压缩流的端口开始。应该可以将其移植到 PHP 并为您解决问题。理想情况下创建一个 github repro 并从编写测试开始。最好有一些测试数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多