WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

JavaScript で HTML の実体参照を展開する

本日は皆さんにお知恵を拝借したく、記事を書いています(^^;

codeなにがしにも投稿したのですが、 HTML の実体参照を展開する以下のような関数を作ってみました。

function htmlUnescape(html)
{
  html = html.replace(/</g, '&amp;lt;').replace(/>/g, '&amp;gt;');
  html = html.replace(/\"/g, '&amp;quot;').replace(/\'/g, '&amp;#39;');
  var div = document.createElement('div');
  div.innerHTML = '<pre>' + html + '</pre>';
  return div.textContent !== undefined ? div.textContent : div.innerText;
}

HTML の実体参照はとてもたくさんあるので、それらをまともに処理するのはちょっと厄介です。そこで、ダミーの DIV 要素を作ってそこに HTML を流し込んで展開させよう、というのが基本的な趣旨です。

これならブラウザがきちんと変換できる実体参照には確実に対応できますし、大きな変換テーブルを持つ必要もありません。ただ、イレギュラーな使い方なので、問題が出ないかどうか確信が持てません。

ということで、「これだとこういう場合にまずいよ」「別のもっといい方法があるよ」というのをご存知の方がおられましたら、教えていただけると嬉しいです。

細かいことでもいいので、お気づきの点があれば、ぜひコメントしてください!


補足: ちょっとわかりづらいようなので、補足します。 やりたいのは、以下のように実体参照を通常の文字に変換することです。

'&amp;copy; WebOS Goodies' -> '© WebOS Goodies'

HTML をエスケープするのではなく、それを解除する変換です。 URL のエスケープを解除する関数は標準で用意されているのに、 HTML はエスケープ・解除ともに自前でやらないといけないんですよね。 できれば標準の関数としてほしいところです。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles