.NETで誤ってレンダリングされたHTML
-
22-07-2019 - |
質問
文字列<!> quot; <BR>
<!> quot;を取得しようとしています。 VB.NETでXSLTを介してHTMLに変換します。ただし、HTMLが出力されると、次のようになります。
<BR>
先に進んでレンダリングしようとすることしか想定できません。これらの</>
をブラケットに戻すことができる方法はありますか?
解決
XSLTが持っていることを確認します:
<xsl:output method="html"/>
編集:コメントからの説明
デフォルトでは、XSLTはXML(1)として出力します。これは、重要な文字をエスケープすることを意味します。特定のインスタンスでは、属性disable-output-escaping="yes"
(intro こちら)しかし、はるかに強力なのは、出力をHTMLの明示的な値に変更することです。これは、次のように、グローバルに同じメリットをもたらします。
- スクリプト要素とスタイル要素については、エスケープされた文字(たとえば <!> amp;および<!> gt;)実際の値 (それぞれ<!> amp;および<!> gt;)。
- 属性については、出現する<!> gtを置き換えます。 <!> gt;で。
<br>
、<img>
、<input>
などの空の要素を書き込みます。 終了タグまたはスラッシュ。- 次のように存在によって情報を伝える属性を記述します 次のような価値に反する チェックされ、選択され、最小化されている フォーム。
堅実なIBM 記事から件名、stylusstudioの最新記事こちら
HTML出力が望ましい場合、HTML出力を指定する必要があります。
(1)実際には出力がデフォルトでHTMLになっている場合がありますが、これが普遍的であるとは思わず、それに依存するのはちょっと鈍いです。
他のヒント
<xsl:text disable-output-escaping="yes"><br></xsl:text>
XSLTについては知らないが..
1つの回避策は、 HttpUtility.HtmlDecode System.Web名前空間から。
using System;
using System.Web;
class Program
{
static void Main()
{
Console.WriteLine(HttpUtility.HtmlDecode("<br>"));
Console.ReadKey();
}
}
...
了解!選択した答えに加えて、文字列に対して次のようなことも行いました。
htmlString = htmlString.Replace("<","<")
htmlString = htmlString.Replace(">",">")
ただし、最終的には、すべてを保持するために<pre>
タグを使用することになります。
文字列<!> quot; <br>
<!> quot;は既にHTMLであるため、Response.Write("<br>")
を実行できます。
しかし、あなたはXSLTを意味しているので、そこで何らかの変換が行われていることを想像します。その場合、トランスフォームはノードとして正しい場所に挿入する必要があります。より良い質問であれば、より良い答えが得られるでしょう