ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

HTMLエンコード処理

HTMLエンコードとは

 HTMLエンコードとは、HTMLとして特殊な意味を持つ文字を、特殊な意味を持たない文字列に置換することです。 具体的には、「&」「lt;」「gt;」「"」などを、「&」「<」「>」「"」に置換します。
 Javaでは、HTMLエンコード処理が標準でサポートされていませんので、独自に処理をする必要があります。 サーブレットコンテナなどが提供している場合が多いですから、その機能を使う方法もありますが、移植性が悪くなります。
 そこで、以下に、ASHで作成したHTMLエンコード処理を紹介します。 ASPを使った場合の、server.HTMLencodeに相当する機能です。

HTMLエンコード処理

 JSPなどで簡単にHTMLエンコードするためのクラスを作成してみます。 Htmlクラスのメソッドとして、encodeメソッドを作成します。 staticクラスとして作成してありますので、newする必要がありません。

クラス
  static Html
メソッド
  String encode(String)
機能
  入力された文字列をHTMLエンコードして返却する
パラメータ
  HTMLエンコードしたい文字列
返却値
  HTMLエンコードされた文字列

 以下に、Htmlクラスのソースを示します。
 最初に入力文字列(strIn)を出力文字列(strOut)にコピーして、エンコードが必要な文字が出てきた場合に、出力文字列を置換しています。 出力文字列の置換は、先頭の&は置換し、残りを挿入する処理となっています。 このアルゴリズムは、エンコードが必要な文字が少ない場合に、高速に処理できる特徴があります。
 HTMLエンコードが必要な文字と、エンコード後の文字列は、配列で初期値を設定しています。

Html.java
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.common;

/** HTMLユーティリティ **/
public class Html {
  /** HTMLエンコードが必要な文字 **/
  static char[] htmlEncChar = {'&', '"', '<', '>'};
  /** HTMLエンコードした文字列 **/
  static String[] htmlEncStr = {"&amp;", "&quot;", "&lt;", "&gt;"};

  /**
  * HTMLエンコード処理。
  *   &,",<,>の置換
  **/
  public static String encode (String strIn) {
    if (strIn == null) {
      return(null);
    }

    // HTMLエンコード処理
    StringBuffer strOut = new StringBuffer(strIn);
    // エンコードが必要な文字を順番に処理
    for (int i = 0; i < htmlEncChar.length; i++) {
      // エンコードが必要な文字の検索
      int idx = strOut.toString().indexOf(htmlEncChar[i]);

      while (idx != -1) {
        // エンコードが必要な文字の置換
        strOut.setCharAt(idx, htmlEncStr[i].charAt(0));
        strOut.insert(idx + 1, htmlEncStr[i].substring(1));

        // 次のエンコードが必要な文字の検索
        idx = idx + htmlEncStr[i].length();
        idx = strOut.toString().indexOf(htmlEncChar[i], idx);
      }
    }
    return(strOut.toString());
  }
}

HTMLエンコード処理の利用例

 JSPファイルでHTMLエンコード処理を使った例です。

<input ... value="<%= Html.encode("エンコードしたい文字列") %>" />

画面イメージ

HTMLエンコードのテスト×
HTMLエンコードのテスト
&の付いたデータ
<>の付いたデータ
"の付いたデータ

JSPのソース

HtmlEncode.jsp
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="jp.ash.common.*" %>

<html>
<head><title>HTMLエンコードのテスト</title></head>
<body>

<h1>HTMLエンコードのテスト</h1>

<form>
<table><tr>
<td>&の付いたデータ</td>
<td><input type="text" value="<%= Html.encode("joe&joe") %>" /></td>

</tr><tr>
<td><>の付いたデータ</td>
<td><input type="text" value="<%= Html.encode("<joe>") %>" /></td>

</tr><tr>
<td>"の付いたデータ</td>
<td><input type="text" value="<%= Html.encode("\"joe\"") %>" /></td>
</tr></table>
</form>

</body>
</html>


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp