关于开头的HTML实体编码的问题

时间:2023-01-10 20:39:42
这2天遇到一个麻烦的事情,就是一个资讯系统的内容中有&#开头的html实体编码。
如果用HtmlDecode处理的话,能够正确显示汉字,但如此一来。将会导致<>等HTML标签被解释。
举例说明如下:

string content = "<font size=\"11\">二&#63788;山<font/>";

该字符串如果直接输出到屏幕,可以正确显示 二郎山,但font标签也会被浏览器解释(这是我不愿意看到的),我想要的输出结果是:
<font size="11">二郎山</font>
即:汉字可以正确显示,而HTML标签被编码不会被浏览器解释。

于是乎在输出之前进行HTML编码处理,但编码后,字符串的内容会变成:
&lt;font size=&quot;11&quot;&gt;&#20108;&amp;#63788;&#23665;&lt;font/&gt;
输出到屏幕上<font size="11">二&#63788;山</font>
标签是不会被解释了,但二郎山的郎字又无法显示了。

因为这个汉字“郎”本身就已经是html实体了,所以编码或者解码,她的处理方式就和其他html标签是一样的。我想输出郎字,就必须要解码,但解码后同样会导致<这些符号被解码。

普通的字符“郎”的unicode码是37070,不是63788。两者之间还是有差别。
我想问的是如何将这个HTML实体编码的汉字转换为普通汉字,这样我就可以用HtmlEncode来处理其他html标签了?

12 个解决方案

#1


            string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二&#63788;山<font/>"));
            Response.Write(content);

这样不行?

#2


……  不能先把二&#63788;Decode  再把整个string Encode吗?

#3


引用 1 楼 liuchaolin 的回复:
            string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二&#63788;山<font/>"));
            Response.Write(content);

这样不行?

这样不行,我当时就想到了。再encode就又变回去了。这个decode出来的郎字,和直接定义的郎字,unicode码貌似不一样。

#4


引用 2 楼 Ryan1221 的回复:
……  不能先把二&#63788;Decode  再把整个string Encode吗?

你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。

#5


引用 4 楼 jiezi316 的回复:
Quote: 引用 2 楼 Ryan1221 的回复:

……  不能先把二&#63788;Decode  再把整个string Encode吗?

你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。

 string content = "<font size=\"11\">" + HttpUtility.HtmlDecode("二&#63788;山") + "<font/>";
            test.InnerText = content;
这样不行吗?

#6


如果要response.write输出   
string content = HttpUtility.HtmlEncode("<font size=\"11\">") + HttpUtility.HtmlDecode("二&#63788;山") + HttpUtility.HtmlEncode("<font/>");

#7


6楼的肯定可以。
但这样的处理方式我个人不是很能接受。因为要对整个内容进行匹配和重新组装。

#8


replace("<","&lt;").replace(">","&gt;")

#9


恩,谢谢各位
其实仅仅只是处理web界面上的显示,我肯定是有办法的。
我其实最想达到的是这样的效果。
就是这个被Decode出来的“郎”,能够转换为真正的 “郎”字。(前面说了,这2种“郎”字的unicode码不一样,所以还是有区别的,被Decode出来的“郎”字再次Encode时会变回&#;的形式,而第2种“郎”字,无论Decode还是Encode都不会发生变化)

这样这个字以后再其他地方,无论如何处理都是不会出问题的。

#10


用正则把汉字(就是<font ……>和</font>中间的字)提取出来进行Decode替换回去行不?

#11


可以写个方法尝试replace方法替换掉有针对性的字符

#12


replace("<","&lt;").replace(">","&gt;") 

#1


            string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二&#63788;山<font/>"));
            Response.Write(content);

这样不行?

#2


……  不能先把二&#63788;Decode  再把整个string Encode吗?

#3


引用 1 楼 liuchaolin 的回复:
            string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二&#63788;山<font/>"));
            Response.Write(content);

这样不行?

这样不行,我当时就想到了。再encode就又变回去了。这个decode出来的郎字,和直接定义的郎字,unicode码貌似不一样。

#4


引用 2 楼 Ryan1221 的回复:
……  不能先把二&#63788;Decode  再把整个string Encode吗?

你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。

#5


引用 4 楼 jiezi316 的回复:
Quote: 引用 2 楼 Ryan1221 的回复:

……  不能先把二&#63788;Decode  再把整个string Encode吗?

你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。

 string content = "<font size=\"11\">" + HttpUtility.HtmlDecode("二&#63788;山") + "<font/>";
            test.InnerText = content;
这样不行吗?

#6


如果要response.write输出   
string content = HttpUtility.HtmlEncode("<font size=\"11\">") + HttpUtility.HtmlDecode("二&#63788;山") + HttpUtility.HtmlEncode("<font/>");

#7


6楼的肯定可以。
但这样的处理方式我个人不是很能接受。因为要对整个内容进行匹配和重新组装。

#8


replace("<","&lt;").replace(">","&gt;")

#9


恩,谢谢各位
其实仅仅只是处理web界面上的显示,我肯定是有办法的。
我其实最想达到的是这样的效果。
就是这个被Decode出来的“郎”,能够转换为真正的 “郎”字。(前面说了,这2种“郎”字的unicode码不一样,所以还是有区别的,被Decode出来的“郎”字再次Encode时会变回&#;的形式,而第2种“郎”字,无论Decode还是Encode都不会发生变化)

这样这个字以后再其他地方,无论如何处理都是不会出问题的。

#10


用正则把汉字(就是<font ……>和</font>中间的字)提取出来进行Decode替换回去行不?

#11


可以写个方法尝试replace方法替换掉有针对性的字符

#12


replace("<","&lt;").replace(">","&gt;")