home
twitter
ページトップへ
目次
  • 特殊文字とは?
  • エスケープとは?
  • XSS攻撃を防ぐ!
  • 実際には第二引数の指定が重要
  • 第三引数で文字コードの指定!
  • htmlspecialchars()がすべてを解決する訳ではない!
about
categories
page
archive
皇帝ペンギンブログ

2025/10/14 (更新日:2025/10/14)

【PHP】ユーザーからの入力はhtmlspecialchars()を使ってエスケープしよう!

Categories > phpの入門編

今回は「htmlspecialchars()」についてです。

・ユーザーからの入力をそのまま表示するサイトを作ってはいけない
・セキュリティの観点から。

・じゃあどうすれば?「エスケープ」しよう!

YouTube版もあるよ!

特殊文字とは?

“ ダブルクォーテーションマーク     "  これで表す
‘ シングルクォーテーションマーク    '  これで表す
< (小なり記号) < > (大なり記号) >

などの、

・HTMLのコードとして意味を持つもの

エスケープとは?

・HTMLエンティティ を使って特殊文字を変換してあげること

HTML文書内で特定の文字や記号を表現するために使用される特殊な記述形式のこと
ブラウザはこれを解析し、対応する実際の文字に置き換えて表示します。

これは、技術的には「文字参照(character reference)」と呼ばれ、アンパサンド(&)で始まり、セミコロン(;)で終わるという形式を取ります。

HTMLタグ

という文字列をそのまま表示したい場合、HTMLには次のように記述します。

<p>HTMLタグ</p>

// PHPコードの例
$string = ‘ Hello “World” ‘;

// デフォルト設定
$escaped_default = htmlspecialchars($string);
// 結果: Hello "World"

PHPではユーザーからデータを受け取り、それを表示することもある
そこで、その受け取ったデータを「エスケープ」して、安全に扱う必要がある

XSS攻撃を防ぐ!

XSSは「Cross-Site Scripting(クロスサイト・スクリプティング)」の略

頭文字を取ってXSSと呼ばれています。
CSS(Cascading Style Sheets)と区別するため、CではなくX

実際には第二引数の指定が重要

htmlspecialchars()関数の第二引数で 
エスケープの対象とするクォーテーション(引用符)の種類が指定できる

・ENT_COMPAT     ダブルクォーテーションマークだけ 「デフォルト」
・ENT_QUOTES     おすすめ 両方エスケープ可能
・ENT_NOQUOTES   どちらもエスケープされない

第三引数で文字コードの指定!

// 最も推奨される形式
$safe_output = htmlspecialchars($input_value, ENT_QUOTES, ‘UTF-8’);

htmlspecialchars()がすべてを解決する訳ではない!

だけど、必ず使おう!
・SQLインジェクションなどは防げない

自分のロゴ!

皇帝ペンギン

全力で、書きます。
少しでもお役に立てたら幸いです。
楽しんで読んで下さい 。-_- 。
よろしくお願いします!

x(旧twitter) youtube
Categories
  • トップへ
  • ITパスポート (1)
  • programming (178)
    • CSSのアニメーション編 (26)
    • CSSのグリッドレイアウト編 (1)
    • CSSのセレクター編 (58)
    • CSSのフレックスボックス編 (1)
    • CSSのメディアクエリー編 (7)
    • CSSの基本編 (34)
    • HTMLのformタグ編 (1)
    • HTMLの基本編 (3)
    • JavaScriptの入門編 (30)
    • JavaScriptの基本編 (5)
    • phpの入門編 (10)
    • Web制作をする環境を整えよう! (1)
  • Uncategorized (25)
  • VScode (1)
  • おすすめ商品! (1)
  • クラロワ (2)
  • マーケティング (17)
  • 勉強 (1)
  • 大学生活 (7)
  • 心理学 (9)
  • 映画 (1)
  • 法学 (4)
  • 経済学 (4)
  • 読書 (8)
Pages
  • プライバシーポリシー
  • 免責事項
  • プロフィール
Archive
  • 2025年10月 (5)
  • 2025年7月 (8)
  • 2025年6月 (1)
  • 2025年3月 (1)
  • 2025年1月 (9)
  • 2024年12月 (13)
  • 2024年11月 (5)
  • 2024年10月 (10)
  • 2024年9月 (15)
  • 2024年8月 (5)
  • 2024年7月 (6)
  • 2024年6月 (5)
  • 2024年5月 (10)
  • 2024年4月 (24)
  • 2024年3月 (11)
  • 2024年2月 (6)
  • 2024年1月 (10)
  • 2023年12月 (4)
  • 2023年11月 (3)
  • 2023年10月 (2)
  • 2023年9月 (3)
  • 2023年8月 (6)
  • 2023年7月 (3)
  • 2023年6月 (8)
  • 2023年5月 (2)
  • 2023年3月 (1)
  • 2023年2月 (1)
  • 2022年10月 (2)
  • 2022年9月 (2)
  • 2022年8月 (8)
  • 2022年7月 (2)
  • 2022年6月 (6)
  • 2022年5月 (9)
  • 2022年4月 (2)
  • 2022年2月 (4)
  • 2021年12月 (1)
  • 2021年11月 (4)
  • 2021年10月 (8)
  • 2021年9月 (14)
  • 2021年8月 (6)
  • 2021年6月 (1)
  • 2021年5月 (2)
  • 2021年4月 (1)
  • 2021年3月 (1)
  • 2021年2月 (2)
  • 2020年10月 (1)
  • 2020年7月 (1)
  • 2020年4月 (1)
  • 2020年1月 (1)
  • 2019年12月 (2)
© Copyright Syuta Chiba, 2019 All Rights Reserved.