3

HTML エンティティのデコードに問題があります。両方使ってみた

System.Net.WebUtility.HtmlDecode()

これがHttpUtilitiesの軽量バージョンだったという単純な理由であると期待して、私は試しました

HttpUtility.HtmlDecode()

同じように。

私の問題は、エンティティ番号ではなく、エンティティ名からデコードする必要があることです。(このリストを参照してください http://www.w3schools.com/tags/ref_entities.asp )

前述のメソッドは両方とも、エンティティ名ではなく、エンティティ番号との間でデコードします。

4

1 に答える 1

2

私は本当にあなたの問題を見ていません。を介してデコードをテストすると、WebUtility.HtmlDecode投稿したリンクにリストされているすべてのエンティティ名がデコードされます。

var encoded = ""'&<>¡¢£¤" +
              "¥¦§¨©ª«¬­®" +
              "¯°±²³´µ¶·" +
              "¸¹º»¼½¾¿" +
              "×÷ÀÁÂÃÄÅ" +
              "ÆÇÈÉÊËÌÍ" +
              "ÎÏÐÑÒÓÔÕ" +
              "ÖØÙÚÛÜÝÞ" +
              "ßàáâãäåæ" +
              "çèéêëìíî" +
              "ïðñòóôõö" +
              "øùúûüýþÿ";
var expected = "\"'&<>¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿×÷ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓ" +
                "ÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ";

Console.WriteLine(System.Net.WebUtility.HtmlDecode(encoded) == expected);

この小さなスニペットは true になります。

エンコーディングに関しては、関数HtmlEncodeはこのように機能するように実装されています。それについてできることはほとんどありませんが、自分で実装することはお勧めしません (本当に必要がない場合は、車輪を再発明しないでください)。エンコーディングに関するこの SO の質問も参照してください: C# HtmlEncode - ISO-8859-1 Entity Names vs Numbers

于 2012-06-26T13:22:41.717 に答える