HTMLエンティティをJavaScriptでエンコードする


100

私はユーザーがコンテンツを入力できるCMSで働いています。問題は、記号を追加する®と、すべてのブラウザでうまく表示されない可能性があることです。検索して、対応するhtmlエンティティに変換する必要のあるシンボルのリストを設定したいと思います。例えば

®=> ®
&=> &
©=> ©
™=>™

変換後、<sup>タグでラップする必要があります。その結果、次のようになります。

® => <sup>&reg;</sup>

特定のフォントサイズとパディングスタイルが必要なため:

sup { font-size: 0.6em; padding-top: 0.2em; }

JavaScriptはこのようなものでしょうか?

var regs = document.querySelectorAll('®');
  for ( var i = 0, l = imgs.length; i < l; ++i ) {
  var [?] = regs[i];
  var [?] = document.createElement('sup');
  img.parentNode.insertBefore([?]);
  div.appendChild([?]);
}

「[?]」は、私がよくわからないことがあることを意味します。

さらなる詳細:

  • jQueryのようなライブラリを必要とするものではなく、純粋なJavaScriptでこれを実行したいと思います。ありがとうございます。
  • バックエンドはRubyです
  • Ruby onRailsで構築されたRefineryCMSを使用する

あなたのバックエンドは何ですか?phpの場合、これを処理する関数がありますが、他の言語にもあると思います。また、Google:developwithstyle.com/articles/2010/06/29/…–
Chris Baker

5
より良い解決策は、UTF-8でエンコードされたテキストを受け入れて出力することです。現在使用されているすべてのブラウザはUTF-8をサポートしています。HTML側ではaccept-charset="UTF-8"<form>タグに追加する必要があります。サーバーでは、出力がUTF-8でエンコードされていること、およびWebサーバーがブラウザーに(Content-Typeヘッダーを介して)それを通知していることを確認する必要があります。rentzsch.tumblr.com/post/9133498042/を参照してくださいそれをすべて実行し、ブラウザが文字を正しく表示しない場合、文字をエンティティに置き換えても違いはありません。
Paul D. Waite 2013

@Chrisは、Ruby onRailsで構築されたCMSで作業しています。
jGallardo 2013

クライアント側のJavaScriptはエンティティが存在しないDOMで動作するため、クライアント側のJavaScriptで文字をHTMLエンティティ参照に変更するのは誤りです。「®」をsup要素にラップすると、解決できるよりも多くの問題が発生する傾向があります。多くのフォントでは、「®」が小さく、下付き文字の位置にあるため、認識できないほどになります。
Jukka K. Korpela 2013

@ JukkaK.Korpela、一部のhtmlエンティティが正しく表示されないことに対処する必要があることを考慮して、どのように対処しますか?<sup>ブログの投稿に使用されている特定のフォントをテストしたので、折り返しは問題ではありませんが、それは考慮すべき良い点です。
JGallardo 2013

回答:


176

正規表現を使用して、特定のUnicode範囲内の任意の文字を同等のhtmlエンティティに置き換えることができます。コードは次のようになります。

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/g, function(i) {
   return '&#'+i.charCodeAt(0)+';';
});

このコードは、指定された範囲(unicode 00A0〜9999、およびアンパサンド、より大きいおよびより小さい)内のすべての文字を、同等のhtmlエンティティに置き換えます。 &#nnn;どこnnn我々はから入手Unicode値がありますcharCodeAt

:ここでアクションでそれを見るhttp://jsfiddle.net/E3EqX/13/(この例では、実施例で用いた要素セレクタのためのjQueryを使用してベースコード自体、上記のjQueryを使用していません。)

これらの変換を行ってもすべての問題が解決するわけではありません。UTF8文字エンコードを使用していることを確認し、データベースが文字列をUTF8に格納していることを確認してください。君はまだ文字があなたのコントロールの外にシステムフォントの設定やその他の問題に応じて、正しく表示されないインスタンスが表示されることがあります。

ドキュメンテーション


jsfiddleありがとうございます。したがって、これを実装します。これを.jsファイルに追加し、他のものを追加して<sup>?でラップすることができます。
JGallardo 2013

2
@JGallardo例を少し書き直して、supタグ(またはその他のタグ)を追加し、関数jsfiddle.net/E3EqX/4に含めます。これを使用するには、「encodeAndWrap」関数をプロジェクトにコピーする必要があります。
クリスベイカー

1
@Chrisはきちんとしたコードスニペットに感謝しますが、バグが1つあります。「[\ u00A0- \ u99999]」は期待どおりの動作をしませんが、「[\ u00A0- \ u9999] | 9」と同じです。 "-すなわち。文字「9」も誤ってHTMLエンティティに置き換えられます。あなたもフィドルでそれを試すことができます。答えの修正を提案します。
SB

@SBそのメモをありがとう、私は最終承認投票をすることさえできました:)
クリスベイカー

1
@mathias Bynensの回答がより完全であることに同意しますが、彼の解決策は84KBであり、それによって私は別の解決策を探し続けました。これは問題ないようですが、charCodes <65、および> 90 && <97を含めることもできますか?
フロリアンマーテンス2014

62

現在受け入れられている回答にはいくつかの問題があります。この投稿ではそれらについて説明し、より堅牢なソリューションを提供します。その回答で提案された解決策は、以前は次のとおりでした。

var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
  return '&#' + i.charCodeAt(0) + ';';
});

ザ・ iU + 00A0からUの範囲+ 9999にはUnicodeの記号が同じ範囲の外にある大文字/小文字のバリアントを有していないので、フラグは冗長です。

mフラグが冗長であるため^、または$正規表現で使用されていません。

なぜU + 00A0からU + 9999の範囲なのですか?それは恣意的なようです。

とにかく、正しくコードしていることをソリューションのすべてを(!アストラル記号を含む)、入力における安全&印刷可能なASCII記号を除き、および実装は、すべての文字参照の名前(だけでなく、HTML4のもの)を使用、彼はライブラリを(免責事項:このライブラリは私です)。そのREADMEから:

(「HTMLエンティティ」の略)は、JavaScriptで記述された堅牢なHTMLエンティティエンコーダー/デコーダーです。HTMLに従って標準化されたすべての名前付き文字参照をサポート、ブラウザーと同じようにあいまいなアンパサンドやその他のエッジケースを処理し、広範なテストスイートを備え、他の多くのJavaScriptソリューションとは異なり、アストラルUnicode記号を適切処理します。オンラインデモが利用可能です。

この関連するStackOverflowの回答も参照してください。


12
また、HEライブラリは... 84KBです!Autch ...より少ない接続を介して携帯電話にダウンロードしてみてください。妥協はどこか..行われなければなら
フロリアンメルテンス

1
@FlorianMertens + gzip縮小した後、は約24KBになります。それはまだ大きいですが、結局のところ、HTMLエンティティを正しくデコードしたい場合は、それらのすべてのデータが必要になります。それを回避する方法はありません。パフォーマンスに影響を与えずにライブラリを小さくする方法を見つけた場合は、プルリクエストを送信してください。
Mathias Bynens 2014

2
@MathiasBynens、間違いなくあなたのライブラリは良いですが、コメントボックスを使用して、受け入れられた回答の問題を強調し、コードブロックで改善された回答を送信してください
diEcho 2017

3
@drzaus画像は大量のデータを保存し、圧縮されていないデータの方がデコードが速いため、画像が大きくなることを回避できます。ただし、プログラムコードは異なり、ライブラリ全体が追加されることが多く、ほとんど使用されません。ライブラリのコードには、独自のコードよりも多くの行が含まれている場合があります。さらに、libの問題を見つけてデバッグしたり、バグレポートを送信したり(またはlibを更新したり)する人はほとんどいないため、コードがチェックされていないライブラリが多数あるソフトウェアでは、メモリリークやその他の問題が続く可能性があります。誰かがhtml-unsafecharsをエンコード/エスケープしたいだけなら、80kbではなく数行だけが必要です。
bryc 2017

1
@MarcoKleinええ、私は私の投稿でそれを説明します。バグのあるコードスニペットが苦しんでいるのは確かに問題です。私が指摘する解決策には、その問題はありません。(「星記号を含む!」を参照)
MathiasBynens19年

29

同じ問題が発生し、エンティティを作成して通常の文字に変換する2つの関数を作成しました。次のメソッドは、任意の文字列をHTMLエンティティに変換し、Stringプロトタイプに戻します。

/**
 * Convert a string to HTML entities
 */
String.prototype.toHtmlEntities = function() {
    return this.replace(/./gm, function(s) {
        // return "&#" + s.charCodeAt(0) + ";";
        return (s.match(/[a-z0-9\s]+/i)) ? s : "&#" + s.charCodeAt(0) + ";";
    });
};

/**
 * Create string from HTML entities
 */
String.fromHtmlEntities = function(string) {
    return (string+"").replace(/&#\d+;/gm,function(s) {
        return String.fromCharCode(s.match(/\d+/gm)[0]);
    })
};

その後、次のように使用できます。

var str = "Test´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æøπ£¨ ƒ™en tést".toHtmlEntities();
console.log("Entities:", str);
console.log("String:", String.fromHtmlEntities(str));

コンソールでの出力:

Entities: &#68;&#105;&#116;&#32;&#105;&#115;&#32;&#101;&#180;&#8224;&#174;&#165;&#168;&#169;&#729;&#8747;&#248;&#8230;&#710;&#402;&#8710;&#247;&#8721;&#8482;&#402;&#8710;&#230;&#248;&#960;&#163;&#168;&#160;&#402;&#8482;&#101;&#110;&#32;&#116;&#163;&#101;&#233;&#115;&#116;
String: Dit is e´†®¥¨©˙∫ø…ˆƒ∆÷∑™ƒ∆æøπ£¨ ƒ™en t£eést 

このソリューションはtvOSでも機能するため、すべての場合にエンコードの問題を適切に解決できます。
loretoparisi 2015年

4
それは少し極端ではありませんか?「abc」、「123」などの「安全な」文字でさえ、すべてをHTMLエンティティに変換ています...空白でさえ
AJPerez 2017年

1
これは悪い答えです。Web上のドキュメントの50%以上には、ほとんどがlatin1とutf-8が含まれています。安全な文字をエンコードすると、そのサイズが500%から600%増加しますが、利点はありません。
holdOffHunger 2018

mアンカーのないパターンでのパターン修飾子の目的を説明してください。sドットを含むパターンに使用するつもりですか?
mickmackusa

18

ライブラリがなくても、IE <9をサポートする必要がない場合は、html要素を作成し、そのコンテンツをNode.textContentで設定できます。

var str = "<this is not a tag>";
var p = document.createElement("p");
p.textContent = str;
var converted = p.innerHTML;

次に例を示します:https//jsfiddle.net/1erdhehv/


2
textContentの代わりにinnerTextを使用してみませんか?
リック

@Rick、回答にリンクされているtextContentのMDNドキュメントを試してみてください。「textContentとHTMLElement.innerTextは簡単に混同されますが、2つのプロパティは重要な点で異なります。」と引用します
アダルシャ

17

これを使用できます。

var escapeChars = {
  '¢' : 'cent',
  '£' : 'pound',
  '¥' : 'yen',
  '€': 'euro',
  '©' :'copy',
  '®' : 'reg',
  '<' : 'lt',
  '>' : 'gt',
  '"' : 'quot',
  '&' : 'amp',
  '\'' : '#39'
};

var regexString = '[';
for(var key in escapeChars) {
  regexString += key;
}
regexString += ']';

var regex = new RegExp( regexString, 'g');

function escapeHTML(str) {
  return str.replace(regex, function(m) {
    return '&' + escapeChars[m] + ';';
  });
};

https://github.com/epeli/underscore.string/blob/master/escapeHTML.js

var htmlEntities = {
    nbsp: ' ',
    cent: '¢',
    pound: '£',
    yen: '¥',
    euro: '€',
    copy: '©',
    reg: '®',
    lt: '<',
    gt: '>',
    quot: '"',
    amp: '&',
    apos: '\''
};

function unescapeHTML(str) {
    return str.replace(/\&([^;]+);/g, function (entity, entityCode) {
        var match;

        if (entityCode in htmlEntities) {
            return htmlEntities[entityCode];
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
            return String.fromCharCode(parseInt(match[1], 16));
            /*eslint no-cond-assign: 0*/
        } else if (match = entityCode.match(/^#(\d+)$/)) {
            return String.fromCharCode(~~match[1]);
        } else {
            return entity;
        }
    });
};

4
エンコード可能な文字のランダムなサブセットを手動で追加すると、自分自身や同僚の問題が蓄積される可能性があります。文字をエンコードする単一の権限が必要です。おそらくブラウザであるか、包括的で維持されている可能性が高い特定のライブラリに失敗している可能性があります。
user2344 6119年

すばらしい点、@ user234461。誰かがその単一の権威を見つけたら、(私のような)心に尋ねることは知りたいです!
idungotnosn

7

HTMLエンティティを複数回エンコードすることを避けたい場合

function encodeHTML(str){
    return str.replace(/([\u00A0-\u9999<>&])(.|$)/g, function(full, char, next) {
      if(char !== '&' || next !== '#'){
        if(/[\u00A0-\u9999<>&]/.test(next))
          next = '&#' + next.charCodeAt(0) + ';';

        return '&#' + char.charCodeAt(0) + ';' + next;
      }

      return full;
    });
}

function decodeHTML(str){
    return str.replace(/&#([0-9]+);/g, function(full, int) {
        return String.fromCharCode(parseInt(int));
    });
}

#例

var text = "<a>Content &#169; <#>&<&#># </a>";

text = encodeHTML(text);
console.log("Encode 1 times: " + text);

// &#60;a&#62;Content &#169; &#60;#&#62;&#38;&#60;&#38;#&#62;# &#60;/a&#62;

text = encodeHTML(text);
console.log("Encode 2 times: " + text);

// &#60;a&#62;Content &#169; &#60;#&#62;&#38;&#60;&#38;#&#62;# &#60;/a&#62;

text = decodeHTML(text);
console.log("Decoded: " + text);

// <a>Content © <#>&<&#># </a>

これは、最初に部分的にエスケープされたテキストが混在している場合にのみ役立ちます。すべての文字列を適切にエンコードできないため、バグが発生します。次のように<#>なります<#&#62;
Rick

@Rickそれについて私に気づいてくれてありがとう、私はそれをより良くするために私の答えを更新しました。
StefansArya

4

HTML特殊文字とその ESCAPE CODES

予約文字はHTMLでエスケープする必要があります:文字エスケープを使用して、ASCII文字のみを使用してHTML、XHTML、またはXMLで任意のUnicode文字[例:&-U +00026]を表すことができます。数値文字参照[例:アンパサンド(&)- &#38;]&名前付き文字参照[例:&amp;]はのタイプですcharacter escape used in markup


事前定義されたエンティティ

    Original Character     XML entity replacement    XML numeric replacement  
                  <                                    &lt;                                           &#60;                    
                  >                                     &gt;                                         &#62;                    
                  "                                     &quot;                                      &#34;                    
                  &                                   &amp;                                       &#38;                    
                   '                                    &apos;                                      &#39;                    

HTMLタグを通常の形式でWebページに表示するには<pre><code>タグを使用するか、タグをエスケープします。いずれかの発生に置き換えることによって、文字列をエスケープ"&"文字列で文字"&amp;"との任意の出現">"文字列で文字"&gt;"。例:stackoverflow post

function escapeCharEntities() {
    var map = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        "\"": "&quot;",
        "'": "&apos;"
    };
    return map;
}

var mapkeys = '', mapvalues = '';
var html = {
    encodeRex : function () {
        return  new RegExp(mapkeys, 'g'); // "[&<>"']"
    }, 
    decodeRex : function () {
        return  new RegExp(mapvalues, 'g'); // "(&amp;|&lt;|&gt;|&quot;|&apos;)"
    },
    encodeMap : JSON.parse( JSON.stringify( escapeCharEntities () ) ), // json = {&: "&amp;", <: "&lt;", >: "&gt;", ": "&quot;", ': "&apos;"}
    decodeMap : JSON.parse( JSON.stringify( swapJsonKeyValues( escapeCharEntities () ) ) ),
    encode : function ( str ) {
        var encodeRexs = html.encodeRex();
        console.log('Encode Rex: ', encodeRexs); // /[&<>"']/gm
        return str.replace(encodeRexs, function(m) { console.log('Encode M: ', m); return html.encodeMap[m]; }); // m = < " > SpecialChars
    },
    decode : function ( str ) {
        var decodeRexs = html.decodeRex();
        console.log('Decode Rex: ', decodeRexs); // /(&amp;|&lt;|&gt;|&quot;|&apos;)/g
        return str.replace(decodeRexs, function(m) { console.log('Decode M: ', m); return html.decodeMap[m]; }); // m = &lt; &quot; &gt;
    }
};

function swapJsonKeyValues ( json ) {
    var count = Object.keys( json ).length;
    var obj = {};
    var keys = '[', val = '(', keysCount = 1;
    for(var key in json) {
        if ( json.hasOwnProperty( key ) ) {
            obj[ json[ key ] ] = key;
            keys += key;
            if( keysCount < count ) {
                val += json[ key ]+'|';
            } else {
                val += json[ key ];
            }
            keysCount++;
        }
    }
    keys += ']';    val  += ')';
    console.log( keys, ' == ', val);
    mapkeys = keys;
    mapvalues = val;
    return obj;
}

console.log('Encode: ', html.encode('<input type="password" name="password" value=""/>') ); 
console.log('Decode: ', html.decode(html.encode('<input type="password" name="password" value=""/>')) );

O/P:
Encode:  &lt;input type=&quot;password&quot; name=&quot;password&quot; value=&quot;&quot;/&gt;
Decode:  <input type="password" name="password" value=""/>

これは、Json形式のhtmlソースコードをiframesrcdoc文字列に追加するのに最適です。
Nime Cloud

これには®が含まれていないため、OPには役立ちません。さらに、このJSは、このような短いマッピングのみを使用するソリューションでさえ、他の多くのソリューションよりもはるかに複雑です。swapJsonKeyValuesは、副作用(マップキーとマップ値の定義)が必要なため、名前が適切ではありません
Rick

@mickmackusaデバッグ値で投稿を更新しました。m入力文字列の特殊文字を保持します。
ヤシュ

投稿に間違いがあった場合。だから、投稿を修正してコメントを提供してみてください。
ヤシュ

3
var htmlEntities = [
            {regex:/&/g,entity:'&amp;'},
            {regex:/>/g,entity:'&gt;'},
            {regex:/</g,entity:'&lt;'},
            {regex:/"/g,entity:'&quot;'},
            {regex:/á/g,entity:'&aacute;'},
            {regex:/é/g,entity:'&eacute;'},
            {regex:/í/g,entity:'&iacute;'},
            {regex:/ó/g,entity:'&oacute;'},
            {regex:/ú/g,entity:'&uacute;'}
        ];

total = <some string value>

for(v in htmlEntities){
    total = total.replace(htmlEntities[v].regex, htmlEntities[v].entity);
}

アレイソリューション


3
これが問題を上記よりもユニークな方法で解決する方法を説明してください。一見すると、このソリューションは、文字列を一度に変更するのではなく、複数のパスで変更するため、速度が遅いように見えます。しかし、私は間違っているかもしれません。いずれにせよ、説明付きで投稿をバックアップする必要があります。
ジャックギフィン2018年

その代わりに、アレイから直接正規表現を使用できます...:D
Cesar De

これは、文字ごとに1つの正規表現です(v in ....の場合)。UTF-8のすべてをカバーしたい場合、これは65,000の正規表現と65,000の実行行になります。
holdOffHunger 2018

2
この答えは、私の場合には優れていると私はそれがここにあった嬉しいので、私は唯一のエンティティに3文字の変換に興味がある
ドリュー

2

すでにjQueryを使用している場合は、 html()

$('<div>').text('<script>alert("gotcha!")</script>').html()
// "&lt;script&gt;alert("gotcha!")&lt;/script&gt;"

インメモリテキストノードがインスタンス化され、 html()呼び出されます。

それは醜いです、それは少しのメモリを浪費します、そしてそれがのようなもののように徹底的であるかどうか私にはわかりません heライブラリのどうか私にはわかりませんが、あなたがすでにjQueryを使っているなら、多分これはあなたのためのオプションです。

ブログ投稿から引用FelixGeisendörferによるjQueryでHTMLエンティティをエンコードします


3
ノードを毎回インスタンス化回避するには、ノードを保存することができますvar converter=$("<div>");し、後でそれを再利用:html1=converter.text(text1).html(); html2=converter.text(text2).html();...
FrancescoMM

1

すべての文字をエンコードしたい場合があります...この関数は、regxpの「すべてが何もない」を置き換えます。

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}


1
絵文字を保存^するには、.をに置き換えますfunction encode(e){return e.replace(/[.]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}
スイスミスター

1

Ourcodeworldのチュートリアルをご覧ください htmlエンティティをエンコードおよびデコードします

最も重要なのは、ライブラリの例です

he.encode('foo © bar ≠ baz ???? qux');
// → 'foo &#xA9; bar &#x2260; baz &#x1D306; qux'

// Passing an `options` object to `encode`, to explicitly encode all symbols:
he.encode('foo © bar ≠ baz ???? qux', {
 'encodeEverything': true
});

he.decode('foo &copy; bar &ne; baz &#x1D306; qux');
// → 'foo © bar ≠ baz ???? qux'

このライブラリを使用すると、コーディングが簡単になり、管理しやすくなります。これは人気があり、定期的に更新され、HTML仕様に準拠しています。package.jsonに見られるように、それ自体には依存関係がありません。


OPはバニラJSを要求し、バニラJSはelement.innerTextを提供します。ライブラリに利点がある場合は、それを回答に追加してください。
リック

0

これが私がエンコーディングを実装した方法です。私は上記の答えからインスピレーションを得ました。

function encodeHTML(str) {
  const code = {
      ' ' : '&nbsp;',
      '¢' : '&cent;',
      '£' : '&pound;',
      '¥' : '&yen;',
      '€' : '&euro;', 
      '©' : '&copy;',
      '®' : '&reg;',
      '<' : '&lt;', 
      '>' : '&gt;',  
      '"' : '&quot;', 
      '&' : '&amp;',
      '\'' : '&apos;'
  };
  return str.replace(/[\u00A0-\u9999<>\&''""]/gm, (i)=>code[i]);
}

// TEST
console.log(encodeHTML("Dolce & Gabbana"));
console.log(encodeHTML("Hamburgers < Pizza < Tacos"));
console.log(encodeHTML("Sixty > twelve"));
console.log(encodeHTML('Stuff in "quotation marks"'));
console.log(encodeHTML("Schindler's List"));
console.log(encodeHTML("<>"));


リストにない\ u00A0- \ u9999の入力の中断
リック

mアンカーのないパターンでのパターン修飾子の目的を説明してください。
mickmackusa

-1

このcharCodeAt()メソッドを使用して、指定された文字の値が127より大きいかどうかを確認し、を使用して数値文字参照に変換できますtoString(16)


4
マジックナンバー127と、これがどのように/なぜ機能するのかについて少し追加していただければ幸いです;)
yckart 2015

-1
replaceHtmlEntities(text) {
  var tagsToReplace = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
  };
  var newtext = text;
  for (var tag in tagsToReplace) {
    if (Reflect.apply({}.hasOwnProperty, this, [tagsToReplace, tag])) {
      var regex = new RegExp(tag, 'g');
      newtext = newtext.replace(regex, tagsToReplace[tag]);
    }
  }
  return newtext;
}

-1

<!DOCTYPE html>
<html>
<style>
button {
backround: #ccc;
padding: 14px;
width: 400px;
font-size: 32px;
}
#demo {
font-size: 20px;
font-family: Arial;
font-weight: bold;
}
</style>
<body>

<p>Click the button to decode.</p>

<button onclick="entitycode()">Html Code</button>

<p id="demo"></p>


<script>
function entitycode() {
  var uri = "quotation  = ark __ &apos; = apostrophe  __ &amp; = ampersand __ &lt; = less-than __ &gt; = greater-than __ 	non- = reaking space __ &iexcl; = inverted exclamation mark __ &cent; = cent __ &pound; = pound __ &curren; = currency __ &yen; = yen __ &brvbar; = broken vertical bar __ &sect; = section __ &uml; = spacing diaeresis __ &copy; = copyright __ &ordf; = feminine ordinal indicator __ &laquo; = angle quotation mark (left) __ &not; = negation __ &shy; = soft hyphen __ &reg; = registered trademark __ &macr; = spacing macron __ &deg; = degree __ &plusmn; = plus-or-minus  __ &sup2; = superscript 2 __ &sup3; = superscript 3 __ &acute; = spacing acute __ &micro; = micro __ &para; = paragraph __ &middot; = middle dot __ &cedil; = spacing cedilla __ &sup1; = superscript 1 __ &ordm; = masculine ordinal indicator __ &raquo; = angle quotation mark (right) __ &frac14; = fraction 1/4 __ &frac12; = fraction 1/2 __ &frac34; = fraction 3/4 __ &iquest; = inverted question mark __ &times; = multiplication __ &divide; = division __ &Agrave; = capital a, grave accent __ &Aacute; = capital a, acute accent __ &Acirc; = capital a, circumflex accent __ &Atilde; = capital a, tilde __ &Auml; = capital a, umlaut mark __ &Aring; = capital a, ring __ &AElig; = capital ae __ &Ccedil; = capital c, cedilla __ &Egrave; = capital e, grave accent __ &Eacute; = capital e, acute accent __ &Ecirc; = capital e, circumflex accent __ &Euml; = capital e, umlaut mark __ &Igrave; = capital i, grave accent __ &Iacute; = capital i, acute accent __ &Icirc; = capital i, circumflex accent __ &Iuml; = capital i, umlaut mark __ &ETH; = capital eth, Icelandic __ &Ntilde; = capital n, tilde __ &Ograve; = capital o, grave accent __ &Oacute; = capital o, acute accent __ &Ocirc; = capital o, circumflex accent __ &Otilde; = capital o, tilde __ &Ouml; = capital o, umlaut mark __ &Oslash; = capital o, slash __ &Ugrave; = capital u, grave accent __ &Uacute; = capital u, acute accent __ &Ucirc; = capital u, circumflex accent __ &Uuml; = capital u, umlaut mark __ &Yacute; = capital y, acute accent __ &THORN; = capital THORN, Icelandic __ &szlig; = small sharp s, German __ &agrave; = small a, grave accent __ &aacute; = small a, acute accent __ &acirc; = small a, circumflex accent __ &atilde; = small a, tilde __ &auml; = small a, umlaut mark __ &aring; = small a, ring __ &aelig; = small ae __ &ccedil; = small c, cedilla __ &egrave; = small e, grave accent __ &eacute; = small e, acute accent __ &ecirc; = small e, circumflex accent __ &euml; = small e, umlaut mark __ &igrave; = small i, grave accent __ &iacute; = small i, acute accent __ &icirc; = small i, circumflex accent __ &iuml; = small i, umlaut mark __ &eth; = small eth, Icelandic __ &ntilde; = small n, tilde __ &ograve; = small o, grave accent __ &oacute; = small o, acute accent __ &ocirc; = small o, circumflex accent __ &otilde; = small o, tilde __ &ouml; = small o, umlaut mark __ &oslash; = small o, slash __ &ugrave; = small u, grave accent __ &uacute; = small u, acute accent __ &ucirc; = small u, circumflex accent __ &uuml; = small u, umlaut mark __ &yacute; = small y, acute accent __ &thorn; = small thorn, Icelandic __ &yuml; = small y, umlaut mark";
  var enc = encodeURI(uri);
  var dec = decodeURI(enc);
  var res = dec;
  document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>


これは質問に答えているようには見えず、コードのみの答えです。コードが何をしているのか、そしてそれが質問にどのように関連しているかの説明を提供してください。
リック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.