是否可以使用PHP在网页中显示RTF文件?

是否可以使用PHP在网页中显示RTF文件?,php,document,rtf,Php,Document,Rtf,我有一个RTF文件,我想在标签被用户输入替换后显示在网页中 我希望能够显示RTF文件,而不必在显示之前将其转换为其他内容 每次我现在尝试时,它都会弹出“打开/保存”框,即使我告诉它以内联方式显示: header("Content-type: application/msword"); header("Content-Disposition: inline; filename=mark.rtf"); header("Content-length: " . strlen($output)); ec

我有一个RTF文件,我想在标签被用户输入替换后显示在网页中

我希望能够显示RTF文件,而不必在显示之前将其转换为其他内容

每次我现在尝试时,它都会弹出“打开/保存”框,即使我告诉它以内联方式显示:

header("Content-type: application/msword");
header("Content-Disposition: inline; filename=mark.rtf");
header("Content-length: " . strlen($output));

echo $output;

不能只从PHP代码中输出文件。您需要从中提取数据,然后内联打印内容

php函数“file_get_contents”可以满足您的需要。功能手册如下:

示例用法如下所示:

$contents = file_get_contents('yourfile.rtf');

网页只能包含HTML。你需要一个像flash这样的浏览器插件来显示其他文件类型。请参见示例。

首先:您的内容类型错误。对于RTF,它是
text/RTF


第二:您只能在线显示这种类型的内容,这些内容可以通过web浏览器呈现。RTF不是其中之一。因此,如果不进行转换,或者没有浏览器插件,您将无法在线显示它。当然,转换可能正在进行中

大多数浏览器无法可靠地显示RTF内容。可以将RTF解析为HTML,并在网页上显示HTML内容

您需要某种程序来解析RTF并将其转换为HTML。我想它一定是免费的。我不知道在PHP中有任何可靠的免费RTF解析或RTF到HTML库

我建议您使用命令行转换程序,如RTF2HTML:

您需要在Web服务器上下载并安装此程序,允许用户将文件上载到临时目录,然后使用shell_exec()从PHP调用命令行应用程序:


然后,将结果解析为HTML并显示它们。这是个不错的策略。请注意,如果要在另一个网页中显示内容,可能需要删除head、body和其他标记

这并不是对您问题的确切回答,但您可能需要做的一件事是从标题中删除“filename=mark.rtf”。如果我在标题中包含“filename”,即使“Content Disposition”是“inline”,浏览器也会将某些内容视为下载内容。

您需要一个用PHP编写的RTF到HTML转换器。我认为此页面包含您的解决方案:


您可能希望签出客户端RTF渲染。它仍处于早期阶段,但它甚至可以渲染嵌入式图形。不过,对呈现嵌入式WMF艺术品的支持仍然非常有限,需要浏览器对标记的支持。

这样做与使用fread()做的事情相同;它输出所有rtf代码,而不是实际的rtf文档。我甚至可以在网页中显示RTF文档,还是需要先将其转换为其他内容?据我所知,您需要先从中获取内容。否则浏览器就不知道该怎么处理它了。是的,这是行不通的。如果你把这个调用的结果打印到屏幕上,用户会看到一堆RTF转义序列,它们看起来不像他们期望的文档。我的答案与上面的人非常相似,我想知道为什么我会被否决?对于我们这些低声誉的用户来说,这是一种艰难的生活……也许是因为他有额外的步骤来调用rtf2html。否则,您的解决方案将只打印一堆rtf文本,这是不可读的(非程序员)。每个人都认为这是不可能的,但我理解Mark的意图。有时浏览器会显示内嵌在浏览器中的PDF或Word文档。不知道为什么有时候会这样。我认为内联/附件是唯一控制这种行为的东西。用户会一直安装MS Word吗?没错!!!!你知道我在追求什么。我不能保证用户会安装Word。这就是为什么我想内联显示它。我想我必须把它转换成其他的东西,比如JPG。最终我需要将其转换为PDF,但这是一个不同的问题。吹毛求疵:你基本上是对的,但大多数浏览器也能够呈现XML(大部分时间),当然也能够呈现纯文本。此外,使用acrobat插件,浏览器可以显示PDF。那么(我知道这很疯狂)的要求呢:“我希望能够显示RTF文件,而不必在显示之前将其转换为其他内容。“?是的,我得到了要求。我不想像其他人那样只告诉他他是索尔,我想我应该告诉他他是索尔,同时提供一个有可能奏效的解决方案。我认为他只是不想自己实现RTF解析器。这样他就不必了。
$html_output_path = '/path/for/processing/files/'
$html_output_filename = $username . $timestamp;
if (is_uploaded_file($_FILES['userfile']['tmp_name'])
{
  shell_exec('rtf2html ' . 
    escapeshellarg($_FILES['userfile']['tmp_name']) . " " .
    $html_output_path . $html_output_filename);
}
$html_to_display = file_get_contents($html_output_path . 
  $html_output_filename);