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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2197閲覧

<等の文字列をエスケープ処理するには

mifi

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/06/30 02:28

php

1<form action="session0630.php" method="post"> 2 <div>ID</div> 3 <div><input type="text" name="my_id" id="my_id" /></div> 4 <input type="submit" value="送信する" /> 5</form> 6 7 8 9 10<?php if(isset($_POST['my_id'])):?> 11 <?php session_start();?> 12 <?php $user= $_SESSION['my_id'] = $_POST['my_id'];?> 13 <p>ようこそ<?php echo htmlspecialchars($user,ENT_QUOTES); ?> さん</p> 14 15 <form method="POST" action="session0630.php"> 16 <input type="submit" value="ログアウト" name="delete"> 17 </form> 18<?php endif ;?> 19 20<?php if(isset($_POST['delete'])):?> 21<?php session_unset();?> 22<?php endif ;?>

フォームに<や”等の文字列を入力した時に、htmlspecialchars()を使って、
文字列を置換しようと思ったのですが、今の状態だとそのまま表示されてしまいます。何が原因なのでしょうか。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

HTMLのエスケープにはおっしゃる通り htmlspecialchars() を使いますし、上記のコードはきちんとエスケープできています。

「そのまま表示」というのがウェブブラウザの画面で、ようこそ<田中>さん みたいに表示されるという事でしょうか?

ならばエスケープはむしろ成功していますよね? HTMLの記号である "<" がHTMLとして処理されずふつうの文字として表示されているわけですから。


ためしに、フォームのメソッドを post から get にし、PHPのコードも $_POST から $_GET に変更し、フォームにエスケープされるべき文字列、例えば <script>alert("***");</script> と入力し送信してみましょう。

ブラウザ画面上では、入力されたとおり ようこそ<script>alert("***");</script> さん と表示されていますが、ここでソースを表示させてみましょう。<p>ようこそ&lt;script&gt;alert(&quot;***&quot;);&lt;/script&gt; さん</p> ときちんと特殊な記号がエスケープされているのが確認できます。

投稿2017/06/30 02:43

編集2017/06/30 02:49
miyahan

総合スコア3095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mifi

2017/06/30 02:49

そうなんですね。>が&gt;に置換されて表示されるものだと思っていました。
miyahan

2017/06/30 02:51

仰るとおり、HTMLソース上で > が &gt; に置換されています。それをウェブブラウザが解釈し、&gt; を > に戻して表示させています。 検証方法を追記しましたので試してみて下さい。
guest

0

記載されたコードはよく見ていませんが、htmlspecialcharsはブラウザ上に表示される文字列を変化させるものではありません。
htmlspecialchars

この辺を合わせて読むと、理解がすすむと思います。
「何故htmlspecialcharsを通すのか?」を一言でどうぞ

表示された HTLM のソースを見ると、htmlspecialcharsで特殊な HTML エンティティに変換されていることは確認できると思います。

投稿2017/06/30 02:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問