0

パスを含む2つのファイルがあります。

/reader.php
/ebook/titlepage.xhtml

読者が最終的に電子ブックtoc.ncxを読み、ナビゲーションを容易にするためにこれを左側のペインに表示できるようにする予定です。ただし、今のところ、私がやりたいのは、xhtmlファイルの表示に関する問題を回避することだけです。

電子書籍のタイトルページは次のように始まります。

    <?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>

問題は私が使うときです

include(/ebook/titlepage.xhtml);

サーバーが短いオープンタグを使用するように設定されているため、予期しないバージョンのT_Stringが発生します

ini_set('short_open_tag', '0')インクルードの前に使用しようとしましたが、役に立ちませんでした。次にreadfile('ebook/titlepage.xhtml')、画像がtitlepage.xhtmlからではなく、reader.phpから相対的に参照されていることを除いて、どの機能を使用するかを試しました。

私は電子ブックファイルを編集したくないので、使用echo <?xml...することは問題外です。最終的には、すべてのファイルをebook.epubにパッケージ化し、phpを使用してアーカイブをナビゲートし、リーダーでファイルを読み取って表示したいと考えています。

私の質問は、ebbokファイルを編集せずに、読み取りファイルを取得して電子書籍に関連するパスを使用するにはどうすればよいかということだと思います。または、インクルードと無視をどのように使用できますか

または、おそらく私がここで気づいていないより良い方法があります。おそらく、htmlファイルをロードして、ボディ内またはボディのみ、あるいはヘッドとボディのみを処理する方法です。最終的には、ヘッドのスタイルとタイトルを利用したいからです。

pasfreeの回答を使用して更新(解決済み)

ここで、HTMLをdomdocumentにロードし、savehtmlを使用して出力する前に、ヘッドにベースタグを追加します。

            //Load the ebook title page
            $doc = new DOMDocument();
            $doc->loadHTMLFile("{$_GET["book"]}/titlepage.xhtml");

            //Create the base element
            $base = $doc->createElement("base");
            $baseHref = $doc->createAttribute('href');
            $baseHref->value = "{$_GET["book"]}/";
            $base->appendChild($baseHref);

            //add <base...> to <head>
            $head = $doc->getElementsByTagName("head")->item(0);
            $head->appendChild($base);

            //output the page
            echo $doc->saveHTML();

ありがとう


readfile()は、ファイルの内容を挿入するのに適しています。file_get_contents()も使用できます。

相対パスが正しく解決されるように、htmlドキュメントにグローバルベースhrefを設定することをお勧めします。

https://developer.mozilla.org/en-US/docs/HTML/Element/base

4

1 に答える 1

1

readfile() は、ファイルの内容を挿入するのに適しています。file_get_contents() も使用できます。

相対パスが正しく解決されるように、HTML ドキュメントにグローバル ベース href を設定することをお勧めします。

https://developer.mozilla.org/en-US/docs/HTML/Element/base

于 2013-01-11T12:36:39.017 に答える