dポイントプレゼントキャンペーン実施中!

ツールとなるファイルがあり、
そこから同一のサーバー内の他階層からHTMLソースを取得しようとしています。

▼階層イメージ
hoge/tool/tool.html //ツール
hoge/a/index.html //対象のファイルA

そして、色々ためしてajaxで対象のソースを取得し
ツール内にあるtextareaに書き出しするところまではできたのですが、

そもそも取得時点でインクルードの中身まで取得してしまっているので、なんとかインクルードの中身は取得せずにtextareaに書き出したいです。


↓これを展開させずにこのまま取得・表示したいです
<!--#include virtual="/include/hogehoe.html" -->


そこで、
そもそも「インクルードの中身は取得せずに対象ファイルの素のソースを引っ張ってくることは可能か不可能か」ということをお聞きしたいです。
使用言語は問いません。

①可能かどうか
②可能な場合どのようなやり方で実装できるのか(「そういったことができるツールとかプラグインあるよ」的なことでも大丈夫です)
③不可能な場合は代替案など(これはもしあれば程度でよいです…)


以上ご教示いただければ幸いです。

質問者からの補足コメント

  • 補足します。
    hoge/a/index.htmlの中には
    <!--#include virtual="/include/hogehoeg.html" -->というソースがあります。

      補足日時:2019/02/25 16:50
  • 【理想】取得したいのはhoge/a/index.htmlの中身そのままのHTML

    実際に取得されてしまうのはhoge/a/index.htmlとhogehoeg.htmlが合体したもの

    ↓インクルードが読み込まれた状態のこれが取得されてしまう
    <!DOCTYPE html>
    <html lang="">
    <head>
    <title>なにかしらのページ</title>
    </head>
    <body>
    <h1>AAAA</h1>
    <p>BBBBBB</p>
    </body>
    </html>

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/02/25 16:52
  • ↓最終的な理想の取得状態
    <!DOCTYPE html>
    <html lang="">
    <head>
    <title>ツール</title>
    </head>
    <body>
    <textarea>
    <!DOCTYPE html>
    <html lang="">
    <head>
    <title>なにかしらのページ</title>
    </head>
    <body>
    <!--#include virtual="/include/hogehoeg.html" -->
    </body>
    </html>
    </textarea>
    <script>//HTMLを取得してくるスクリプト</script>
    </body>
    </html>

      補足日時:2019/02/25 16:54
  • ajaxは以下のようになっています。

    var filepass = "hoge/a/index.html"; //取得したいファイルパス
    $.ajax({
    url: filepass,
    type: 'GET',
    dataType: 'html',
    success: function (data) {
    $('textarea').text(data); //テキストエリアにコードを書き出し
    },
    error: function (data) {
    //取得できなかった時の処理
    }
    });

    ちなみに、なぜajaxを使用したかというの私がサーバーサイド言語に疎く、
    クライアントサイドの言語しか扱ったことがなかったためそれで再現しようとしました。

    しかしながらクライアントサイド言語のみではやはり限界ではないかと考え、
    今回言語問わず質問させていただきました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/02/25 17:28

A 回答 (3件)

そのコードならインクルードされた状態で取得されて当然。

httpでGETしてるんだから。
クライアント側でサーバのファイルを取得する手段がhttp以外に無いのなら無理でしょう。
サーバ側でperlなりphpなりshなりで対応してください。
取得部分なんてほんの数行で書けるはずですよ。
    • good
    • 0

はぁ、表示のときにインクルードされるのではなく取得のときにですか。

。。
取得をどのように行っているのか(httpプロトコル使ってる?)によりますが、perlでもphpでもshでも普通に「ファイルの読み込み(ファイルオープン)」すればいいのではないですかね?
例えばshスクリプトでwgetすればインクルードされるのかもしれないけど(やったことないですが)、単にcatするだけならインクルードされませんよね?
fopenとかreadfileとか。

取得部分のajaxソースってどうなってるのでしょう。
この回答への補足あり
    • good
    • 0

まだちょっと質問が理解しきれない気がするけど、


・hoge/a/index.html の中に<!--#include virtual="/include/hogehoe.html" -->というソースがあって、
・hoge/tool/tool.html で hoge/a/index.html を取得したときに /include/hogehoe.html までインクルードされた状態でtextareaに表示されてしまうのをなんとかしたい
ってことで合ってます?

だとすれば、
表示するときに<pre>タグを使うとか、特殊文字をエスケープすればいいのではないですかね?
そんなに珍しい作業でもないと思うけど。
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

認識としてはその通りです。
「hoge/a/index.htmlの中に<!--#include virtual="/include/hogehoe.html" -->というソースがある」という点について後程補足に追記します。

質問についてのご認識の通りです。

しかしながら、
・表示するときに<pre>タグを使う
・特殊文字をエスケープする

上記対策以前の問題で、「取得」した時点でインクルード内のソースまで取得してしまっているため
preタグを使おうがエスケープしようが表示はインクルード先のhogehoe.htmlの中身も一緒に表示されてしまうのです。

================

▼tool.htmlの中身
<!DOCTYPE html>
<html lang="">
<head>
<title>ツール</title>
</head>
<body>
<textarea></textarea>
<script>//HTMLを取得してくるスクリプト</script>
</body>
</html>

▼hoge/a/index.htmlの中身
<!DOCTYPE html>
<html lang="">
<head>
<title>なにかしらのページ</title>
</head>
<body>
<!--#include virtual="/include/hogehoeg.html" -->
</body>
</html>

▼hogehoeg.htmlの中身
<h1>AAAA</h1>
<p>BBBBBB</p>
...


================

お礼日時:2019/02/25 16:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!