7

MHT ファイルを表示するための iframe を取得する際に問題が発生しています。

if( strtolower( substr( $filename , -4 ) ) == ".mht" ){

    $filename = str_replace( "/" , "\\" , $filename );

    header("Content-type: $filetype");
    header("Content-Length: $filesize");
    header('Content-Disposition: attachment; filename="'.$title.'.mht"');

    readfile( HT_STORAGE . $filename );
}
else{
    $filename = str_replace( "\\" , "/" , $filename );
    header( "location: https://secure.***************.com/" . $filename );
}

上記の方法は機能しますが、クライアントが満足していない 2 つの手順 (ダウンロードと開く) が必要です。

ご覧のとおり、今はブラウザに強制的に MHT をダウンロードとして開かせています。MHT 拡張子を持たないファイルの場合と同様に、この iframe 内に MHT を表示するように、ヘッダーの場所を使用してリダイレクトする必要があります。これは、ブラウザにその MHT コンテンツを伝える単なるヘッダー呼び出しであると想定しています。通常のリダイレクトでは、ブラウザーは一連の MHT タグを表示するだけで、実際のコンテンツは表示しません (そのため、特別なヘッダーが必要であると想定しています)。何か案は?

編集:

この問題に関して私が見つけたその他の情報を次に示します。MHT ファイルには、次のようないくつかのセグメントが含まれています。

From: "Saved by Windows Internet Explorer 9"
Subject: Print Preview
Date: Tue, 2 Aug 2011 12:06:51 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0186_01CC510C.A9789090"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7600.16807

This is a multi-part message in MIME format.

------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://*******.net/packages/js/jquery.header.js

何らかの理由で、添付方法を使用してファイルを「開く」と、IE/Firefox でドキュメントが問題なくレンダリングされます。ヘッダーの「場所」メソッドを使用すると、ファイルの内容 (html タグ、MIME など)、解釈された内容が表示されるだけです。これを行うと、MHT ページを実際に表示するのではなく、生の HTML 出力が表示されます。

if( strtolower( substr( $filename , -4 ) ) == ".mht" ){

    $filename = str_replace( "\\" , "/" , $filename );

header("Content-type: message/rfc822");
header( "location: " . $filename );
//header("Content-Length: $filesize");
//header('Content-Disposition: attachment; filename="'.$title.'.mht"');

//readfile( HT_STORAGE . $filename );
}
else{
$filename = str_replace( "\\" , "/" , $filename );
header( "location: https://secure.*****************.com/" . $filename );
}

content-type と location を使用すると、出力は IE と FF (およびほとんどの場合、他のすべてのブラウザー) で次のようになります。

From: "Saved by Windows Internet Explorer 9"
Subject: Print Preview
Date: Tue, 2 Aug 2011 12:06:51 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
    type="text/html";
    boundary="----=_NextPart_000_0186_01CC510C.A9789090"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7600.16807

This is a multi-part message in MIME format.

------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: text/html;
    charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://kinnser.net/am/printwrapper.cfm?PatientTaskKey=36184728

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><TITLE>Print=20
Preview</TITLE>...

したがって、実際に MHT をレンダリングするのではなく、すべてのタグとデータを吐き出すだけです。

何か案は?ファイルから「MIME」データを削除する必要がありますか?:

------=_NextPart_000_0186_01CC510C.A9789090
    Content-Type: text/html;
        charset="utf-8"
    Content-Transfer-Encoding: quoted-printable
    Content-Location: https://kinnser.net/am/printwrapper.cfm?PatientTaskKey=36184728

もしそうなら、どうやって?

編集

皮肉なことに、それを content-disposition: 添付ファイルとして設定し、readFile を使用すると、ドキュメントを開くことができ、適切に表示されます。インラインで iframe に直接挿入しようとした場合にのみ、ソース コードがレンダリングされ、コンテンツはレンダリングされません。何か案は?

4

1 に答える 1

3

現在、MHT を表示する際の Google-Chrome に関する既知の問題があります。MHT は常に MHT として扱われContent-Disposition: attachment、ダウンロードされます。

IE は常に MHT を正常に表示する必要があります。

Firefox 用のプラグインをインストールすると、Firefox で問題なく表示されます。

ブラウザーが実際に MHT を正しく表示できた場合は、次のヘッダーで十分です。

Content-Type: message/rfc822
Content-Disposition: inline

Chrome で MHT ファイルを表示する際にも問題が発生しました。最終的に使用した解決策は、MHT をオンザフライで単一の HTML ページに変換することでした。これは私が扱っていた状況では機能しましたが、一般的な MHT ファイルでは機能しない可能性があります。

于 2012-11-14T18:10:19.540 に答える