[解決済み] javascriptでxmlエンティティをエスケープするには?
2023-05-24 08:11:46
質問
JavaScript(サーバーサイドのnodejs)で、出力としてxmlを生成するプログラムを書いています。
文字列を連結してxmlを構築しています。
str += '<' + key + '>';
str += value;
str += '</' + key + '>';
問題なのは もし
value
のような文字が含まれている場合
'&'
,
'>'
または
'<'
?
これらの文字をエスケープする最善の方法は何ですか?
またはXMLエンティティをエスケープすることができるJavaScriptライブラリはありますか?
どのように解決するのですか?
HTMLエンコーディングは、単純に
&
,
"
,
'
,
<
と
>
の文字列を、同等のエンティティに置き換えます。順序が重要で、もしあなたが
&
を最初に置き換えないと、いくつかの実体を二重にエンコードしてしまいます。
if (!String.prototype.encodeHTML) {
String.prototype.encodeHTML = function () {
return this.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};
}
これでは @Johan B.W. de Vries さんが指摘されたように、タグ名の問題が発生するので、私が想定したのは
value
だけ
逆に、HTMLの実体をデコードしたい場合は
1
をデコードしていることを確認してください。
&
を
&
に変更し、エンティティの二重デコードをしないようにします。
if (!String.prototype.decodeHTML) {
String.prototype.decodeHTML = function () {
return this.replace(/'/g, "'")
.replace(/"/g, '"')
.replace(/>/g, '>')
.replace(/</g, '<')
.replace(/&/g, '&');
};
}
<サブ
1
は含まず、基本的なものだけです。
©
から
©
など
ライブラリに関しては
アンダースコア.js
(または
Lodash
を使用することもできます)は
_.escape
メソッドでこの機能を実行できます。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] moment.jsでミュータビリティを回避するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる