質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.95%

POSTで受け取ったデータをHTMLとして表示させたい

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 5,905

score 120

前提・実現したいこと

HTMLファイルのformメソッドを使用して別ページに入力した値をPOSTし、受け取った値をHTMLソースとして表示させたいです。

例)
test.htmlにformメソッドを定義して、test_o.phpに反映させる。
<b>test</b>をPOSTした時に、test_o.phpでtestの太文字が表示される。

発生している問題・エラーメッセージ

echoを使えば表示できるのは分かるのですが、HTMLソースに変換して表示させる方法が分かりません。

該当のソースコード

test.html

<form action="../test_o.php" method="post">
  <textarea name="TEST" rows="4" cols="40">ここにソースを入力してください</textarea>
  <br>
  <input type="submit" value="送信"><input type="reset" value="リセット">
</form>

test_o.php

<?php
  $test = htmlspecialchars($_POST['TEST']);
  echo $test;
?>

試したこと

PHP・HTMLとも知識が少なく、HTML側でformを使って送る時にHTMLソースとして送る方法があるのか、テキストとして受け取ったデータをPHPでHTMLソースに変換する方法があるのかも分からない状態です。
どちらの方法を調べてみても参考になる情報を見つけられませんでした。

非常に初歩的な質問かもしれませんが、参考になるURLの記載だけでも結構ですので、ご教示よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

じつは、$_POSTにはHTMLタグがそのままで来ていて、htmlspecialcharsでエスケープしているので、そのままechoすればタグもそのまま出ます。

ローカルで動かす試験程度ならそれでいいのですが、実用システムに組み込む場合には、XSSを防ぐ必要があります。「HTMLタグを自由に書ける」となると、当然<script>も書けてしまうので、意図しないJavaSciptを動かされてしまいます。ということで、ユーザーから書式付きテキストを受け取る場合、

  • 信頼できるライブラリで、受け入れるタグ・属性を限定してそれ以外のものをすべて取り除く。
  • Markdownなど、HTMLより自由度の低い形式で受け取る。
  • 管理側など、信頼できるユーザーだけが登録できるようにする。

など、何らかの対策が必要になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/29 17:03

    ご回答ありがとうございます。
    解説までして頂いて勉強になりました。

    セキュリティについては
    実際にはID・PASSを入力してログインする管理画面にtest.htmlのようなページを設置して、公開画面にtest_o.phpのようなページを設置するので、大丈夫だと思います。
    色々とご考慮頂いてありがとうございます。

    キャンセル

  • 2016/07/29 20:57 編集

    ↑なぜこれで安全と判断できるのか少し疑問です…

    パスワードの管理とかも大丈夫ですかね?もし平文で記録していたらその時点でアウトですし,https:// ではない通信であれば「本サイトの通信には暗号化は使用されませんので,重要なパスワードは本サイトに使わないでください」という明記はあったほうがいいと思います.

    キャンセル

+1

たんにhtmlspecialchars()をつけるかつけないかの話?

<form method="post">
<textarea name="test" rows="4" cols="40">
<div style="background-color:red;">hoge</div>
</textarea>
<input type="submit" value="go">
</form>

<?PHP
$test=filter_input(INPUT_POST,"test");
print $test;
print htmlspecialchars($test);
?>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/29 16:54

    はい。
    その通りでした。
    勉強不足と調査力不足で恥ずかしいです。
    ご回答ありがとうございました。

    キャンセル

check解決した方法

-1

すみません。
質問してすぐに思いつきました・・・
htmlspecialcharsを使用すると<>などを文字列とみなしてしまうのですね。

<?php
echo $_POST['TEST'];
?>

これだけで良かったんですね。
お騒がせしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る