icon
icon

JavaScriptでHTMLのエスケープ処理を行う方法を現役エンジニアが解説【初心者向け】

初心者向けにJavaScriptでHTMLのエスケープ処理を行う方法について現役エンジニアが解説しています。エスケープ処理とは改行や、タブなどを文字列中で表現するための方法です。HTMLでは特別な記号を使ってエスケープ処理を実現しています。エスケープシーケンスの一覧を確認しましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

JavaScriptでHTMLのエスケープ処理を行う方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使って初心者向けに解説します。

JavaScriptについてそもそもよく分からないという方は、JavaScriptとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのオンラインブートキャンプ、JavaScript/jQuery講座の内容をもとにしています。

 

目次

1時間でできる無料体験!

エスケープ処理とは

エスケープ処理とは、そのままでは意図した文字列を表現できない場合に使用する、代替文字列処理のことです。

通常、JavaScriptからHTML画面に文字列を表示させる場合、「こんにちは」という文字はそのまま画面に「こんにちは」と表示されます。ところが、ある特殊な状況で「<p>こんにちは</p>」と表示させようとした場合、画面にそのまま文字列を表示させることができないケースがあります。

このような場合、<p>の代わりに次のような文字列を入力すると、HTMLデコードにより<p>に変換されます。

HTMLタグ文字列のエスケープ処理例 ( JavaScript )

&lt;p&gt;  // HTMLデコード時に、<p>に変換される

[PR] フロントエンドで副業する学習方法を動画で公開中

エスケープ処理が必要になる状況

JavaScirptからのHTML要素の追加処理

JavaScriptで生成したHTMLコードを動的に画面表示する場合に、HTMLコードのエスケープが必要になる場合があります。

例えば、以下のようにjQueryのappendメソッドを使うことで、画面に<p>タグのDOMを動的に追加し、文字列を表示させることができます。

JavaScript ( jQueryを利用 )

$("#divArea").append('<p id="pdom">こんにちは</p>');

HTML

  <p class="title">Hello TechAcademy !</p>
  <div id="divArea"></div>

画面表示1

この時、appendの引数で指定した<p id=”pdom”>は画面上でpタグとして扱われ、「こんにちは」の文字列はp要素として画面表示されます。

ところが、次のようなコードでHTMLにDOMを追加すると、意図しない画面表示となります。

JavaScript ( jQueryを利用 )

$("#divArea").append('<p id="pdom">こんにちは、<p>タグの解説をします。</p>');

画面表示2

同じ方式で画面に<p>という文字列を表示させようとしても、<p>はHTMLタグとしてDOMに変換されてしまうため、画面表示させることができません。

このような時に、HTMLエスケープ処理が必要となります。

JavaScriptとHTMLは別々のファイルでコーディングするのが通常ですが、SPAのようにAjaxを多用するアプリケーションの場合は、APIから動的に取得したデータをJavaScript側で生成したDOMにセットした後、HTMLに追加して動的に画面表示させるため、JavaScript側でのHTMLエスケープが必要になるんですね。

エスケープ処理が必要にならない状況

JavaScript側から単に画面に文字列を表示させたい場合、エスケープ処理は必要ありません。

例えば、このような場合です。

JavaScript ( jQueryを利用 )

$("#area2").text("<p>タグの解説をします");

HTML

<div id="area2"></div>

画面表示3

このようにDOM操作時においても、多くの場合エスケープ処理を必要としませんのでご安心ください。

本記事では、JavaScript側からHTMLのDOM要素を生成して追加レンダリングするという特殊な状況を前提としています。

 

大石ゆかり

JavaScriptなのに、HTMLエスケープが必要な理由がわかりました。

田島悠介

エスケープ処理を使うケースは少ないけど、覚えておくと便利だよ。

HTMLのエスケープ処理を行う方法

HTMLの仕様で定められた特殊な文字列で<p>などの文字列を置き換えることにより、エスケープ処理を行うことができます。この特殊な文字列は「エスケープシーケンス」と呼ばれています。

代表的なHTMLエスケープシーケンス

この3つを使うだけで、DOM追加時のエスケープ処理としては十分でしょう。

エスケープ対象コード エスケープシーケンス 説明
< &lt; タグ構成記号の左側部分
> &gt; タグ構成記号の右側部分
&quot; ダブルクォーテーション

HTMLエスケープシーケンス利用例

JavaScriptから追加したDOM要素で「こんにちは、<p>タグの解説をします」と表示できるようなコードを見てみましょう。

JavaScript ( jQueryを利用 )

$("#divArea").append('<p id="pdom">こんにちは、&lt;p&gt;タグの解説をします</p>');

HTML

  <p class="title">Hello TechAcademy !</p>
  <div id="divArea"></div>

画面表示4

<p>タグのDOMを動的追加しながら、同時にDOM内にセットした<p>の文字列表示に成功しています。

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

実際に書いてみよう

今回の解説で登場した、画面を表示・操作可能なサンプルプログラムをご紹介します。実際に動かして、エスケープ処理を成功させてみましょう。

画面にはボタンが2つ用意してあり、「DOMを追加」ボタンを押下するとHTMLエスケープが必要なDOM追加処理が実行できるようになっています。

また、「既存DOMを操作」のボタンを押下すると、HTMLエスケープが不要な場合の操作を検証することができます。

HTML

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="sample.css">
    <title>HelloTechAcademy</title>
  </head>
  <body>
    <p class="title">Hello TechAcademy !</p>
    <div id="divArea"></div>
    <div id="area2"></div>
    <br>
    <button type="button" id="btn1">DOMを追加</button>
    <button type="button" id="btn2">既存DOMを操作</button>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script type="text/javascript" src="techAcademy.js"></script>
  </body>
</html>

JavaScript ( techAcademy.js )

// 「DOMを追加」ボタンを押下すると処理を開始する
$("#btn1").on("click", function()  {
  // $("#divArea").append('<p id="pdom">こんにちは</p>');
  // $("#divArea").append('<p id="pdom">こんにちは、<p>タグの解説をします</p>');
  $("#divArea").append('<p id="pdom">こんにちは、&lt;p&gt;タグの解説をします</p>');
});

// 「既存DOMを操作」ボタンを押下すると処理を開始する
$("#btn2").on("click", function()  {
  $("#area2").text("<p>タグの解説をします");
});

CSS ( sample.css )

.title {
    font-size: 18px;
    margin-bottom: 10px;
}

#divArea, #area2 {
    width: 300px;
    padding: 14px;
    font-size:14px;
    background-color: #74e5d2;
}

p { margin: 4px; }

#pdom { font-weight: bold;}

まとめ

今回は、JavaScriptでHTMLエスケープが必要な状況の解説と、エスケープ処理例をご紹介しました。

一度理解しておくと、いざというときにすぐに問題が解決できますので、ぜひ習得しておきましょう。

 

また、HTMLファイルにおけるエスケープ処理を解説する記事もありますので、こちらもご覧ください。

1時間でできる無料体験!

執筆してくれたメンター

寺谷文宏 ( Teratani Fumihiro )

Webアプリケーションエンジニアとして数多くのプロジェクトを経験し、フロントエンドからサーバーサイドまで総合的な開発を得意としています。

TechAcademyではフロントエンド、Javaコースを担当。

 

大石ゆかり

DOMの追加って難しいんですね。

田島悠介

これができると、エンジニアとしてさらにレベルアップできるよ。

大石ゆかり

サンプルを試しながら理解していきます。ありがとうございました。

 

TechAcademyでは、初心者でも、JavaScript・jQueryを使ったWebサービス公開を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する