カテゴリ: PHP 更新日: 2025/12/30

PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説

PHP の特殊文字とエスケープ処理(htmlspecialchars, htmlentities)
PHP の特殊文字とエスケープ処理(htmlspecialchars, htmlentities)

先生と生徒の会話形式で理解しよう

生徒

「PHPで入力フォームから受け取った文字を表示するだけなのに、変な記号が表示されてしまいました……」

先生

「それは『特殊文字』が原因かもしれませんね。PHPには、そうした文字を安全に表示するためのエスケープ処理が必要です。」

生徒

「えすけーぷ処理?なんだか難しそう……」

先生

「大丈夫ですよ!htmlspecialcharshtmlentitiesというPHPの関数を使えば簡単にできます。では、わかりやすく順番に説明していきましょう!」

-

1. PHPの「特殊文字」とは?

1. PHPの「特殊文字」とは?
1. PHPの「特殊文字」とは?

「特殊文字(とくしゅもじ)」とは、HTMLで特別な意味を持つ記号のことです。たとえば、次のような記号です:

  • <(小なり)
  • >(大なり)
  • &(アンパサンド)
  • "(ダブルクオーテーション)
  • '(シングルクオーテーション)

これらの文字は、そのままWebページに表示しようとすると、HTMLのタグと誤解されて正しく表示されないことがあります。

2. エスケープ処理とは何か?

2. エスケープ処理とは何か?
2. エスケープ処理とは何か?

エスケープ処理(escape processing)とは、「特殊文字」を画面に正しく表示できるように変換することです。これによって、Webページが正しく動作するだけでなく、セキュリティ対策(クロスサイトスクリプティング対策)としても重要です。

たとえば、次のようなコードをPHPで実行してみましょう。


$user_input = '<script>alert("危険");</script>';
echo $user_input;

このままでは、alertのウィンドウが出てくる危険な動作になる可能性もあるので、エスケープ処理が必須なのです。

3. htmlspecialchars関数の使い方

3. htmlspecialchars関数の使い方
3. htmlspecialchars関数の使い方

htmlspecialcharsは、HTMLの特殊文字を「表示用の記号」に変換してくれるPHPの関数です。初心者でも簡単に使えます。

使い方は以下のようになります:


$user_input = '<h1>こんにちは</h1>';
echo htmlspecialchars($user_input);

実行結果:


<h1>こんにちは</h1>

このように、<>を変換してくれるので、安全に表示できます。

4. htmlentities関数との違い

4. htmlentities関数との違い
4. htmlentities関数との違い

htmlentitiesも同じくエスケープ処理を行う関数ですが、より多くの文字を変換してくれるという特徴があります。

たとえば:


$text = "5 > 3 と書きたい";
echo htmlentities($text);

実行結果:


5 &amp;gt; 3 と書きたい

これは一見やりすぎにも思えますが、より厳密なセキュリティや表示制御が必要な場面では役立ちます。

-

5. 実際に使い分けてみよう

5. 実際に使い分けてみよう
5. 実際に使い分けてみよう

それぞれの関数の違いを比較してみましょう。


$input = '"こんにちは" & さようなら';

echo htmlspecialchars($input);
// 結果: &quot;こんにちは&quot; &amp; さようなら

echo htmlentities($input);
// 結果: &quot;こんにちは&quot; &amp; さようなら(同じに見えるが、内部的には全部変換)

初心者は、まずhtmlspecialcharsから覚えておくとよいでしょう。

6. エスケープしないとどうなるの?

6. エスケープしないとどうなるの?
6. エスケープしないとどうなるの?

フォームから送られた入力をそのまま表示すると、悪意のあるコード(スクリプト)を実行されてしまう危険性があります。これは「クロスサイトスクリプティング(XSS)」と呼ばれる攻撃の一種です。

たとえば、次のようなコードをそのまま表示してしまうと……


<script>alert("危険なコード")</script>

このように、安全なサイトでも思わぬトラブルになる可能性があるので、必ずエスケープ処理をしておきましょう。

7. 入力・表示の基本ルール

7. 入力・表示の基本ルール
7. 入力・表示の基本ルール

PHPでのエスケープ処理の基本的な考え方は、次のようになります:

  • データを表示するとき:必ずhtmlspecialcharsまたはhtmlentitiesを使う
  • データを保存するとき:エスケープ処理は不要

表示のタイミングで処理するのがポイントです。

8. よくある間違いと注意点

8. よくある間違いと注意点
8. よくある間違いと注意点

初心者がよくやってしまう間違いに、「保存時にエスケープして、表示時にさらにエスケープする」というものがあります。これでは表示が崩れてしまうことがあります。

正しくは、保存時にはそのまま、表示時だけエスケープ処理をするようにしましょう。

まとめ

まとめ
まとめ

この記事では、PHPでよく扱う特殊文字と、それを安全に表示するためのエスケープ処理について詳しく解説しました。PHP初心者にとって、フォーム入力やユーザーから受け取ったデータをそのまま表示することは、一見簡単に思えますが、HTMLの特殊文字や記号が原因で予期しない表示や動作が起こることがあります。たとえば、<、>、&、"、'などの文字は、HTMLタグとして解釈される可能性があるため、適切な処理が必要です。

エスケープ処理とは、こうした特殊文字をHTML上で安全に表示するために変換する操作のことです。PHPではhtmlspecialcharshtmlentitiesという二つの関数があり、状況に応じて使い分けることができます。htmlspecialcharsは主要な特殊文字を変換し、シンプルで効率的に安全表示を実現します。一方、htmlentitiesはさらに多くの文字をHTMLエンティティに変換でき、より厳密なセキュリティや表示制御が必要な場合に適しています。

また、エスケープ処理は「表示するとき」に行うのが基本であり、データベースに保存する際に行う必要はありません。保存時にエスケープをかけてしまうと、表示時に再度エスケープすると文字化けや表示崩れの原因になります。このルールを守ることで、PHP初心者でも安全かつ正確にWebページを構築することができます。

サンプルプログラムで復習


$input = '<h2>安全な表示</h2> & 特殊文字';
echo htmlspecialchars($input);
// 結果: <h2>安全な表示</h2> & 特殊文字

echo htmlentities($input);
// 結果: &lt;h2&gt;安全な表示&lt;/h2&gt; &amp; 特殊文字

このように、htmlspecialcharsを使えば基本的な特殊文字は変換され、表示崩れやXSS攻撃から守ることができます。htmlentitiesはより厳密にすべての特殊文字を変換したい場合に適しています。状況に応じて使い分けることが大切です。

振り返りとポイント

  • 特殊文字はHTMLで特別な意味を持つ記号であり、無処理で表示するとタグとして解釈される場合がある
  • エスケープ処理は表示時に行うのが基本で、保存時には不要
  • htmlspecialcharsは主要な特殊文字を変換、htmlentitiesはさらに多くの文字を変換
  • 表示時のエスケープ処理はセキュリティ対策としても重要(XSS対策)
  • 初心者はまずhtmlspecialcharsを覚え、必要に応じてhtmlentitiesを使う
先生と生徒の振り返り会話

生徒

「先生、PHPで特殊文字をそのまま表示すると、どうして問題になるんですか?」

先生

「特殊文字はHTMLのタグや記号として解釈されるからです。<や>がそのままHTMLとして認識されてしまうと、意図しない表示や動作が起きます。」

生徒

「なるほど。だからエスケープ処理が必要なんですね。」

先生

「そうです。htmlspecialcharsで主要な記号を変換し、htmlentitiesを使えばさらに多くの文字を安全に表示できます。表示時に処理するのが基本で、保存時にはそのまま保存して問題ありません。」

生徒

「これで、フォームからの入力やユーザーの文字も安全に表示できるんですね!」

先生

「その通りです。PHP初心者でも、このルールを守ればXSSなどのセキュリティリスクを減らせますし、正しい表示も実現できます。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPでフォームから受け取った文字が意図せずタグとして表示されるのはなぜですか?

HTMLで特別な意味を持つ記号、つまり特殊文字が原因です。これらの文字はそのまま表示するとブラウザがHTMLタグとして解釈してしまうため、意図しない表示になります。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方
New2
PHP
PHPのCSRF対策を完全理解!トークンを使った安全なフォーム送信の仕組みを初心者向けに徹底解説
New3
PHP
PHPのSQLインジェクション対策を完全解説!初心者でも安全にデータベースを扱う方法
New4
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.2
Java&Spring記事人気No2
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.7
Java&Spring記事人気No7
PHP
PHPのOAuth認証をやさしく解説!Google・Facebookログインを初心者向けに実装しよう
No.8
Java&Spring記事人気No8
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
-
-