如果用HtmlDecode处理的话,能够正确显示汉字,但如此一来。将会导致<>等HTML标签被解释。
举例说明如下:
string content = "<font size=\"11\">二郎山<font/>";
该字符串如果直接输出到屏幕,可以正确显示 二郎山,但font标签也会被浏览器解释(这是我不愿意看到的),我想要的输出结果是:
<font size="11">二郎山</font>
即:汉字可以正确显示,而HTML标签被编码不会被浏览器解释。
于是乎在输出之前进行HTML编码处理,但编码后,字符串的内容会变成:
<font size="11">二&#63788;山<font/>
输出到屏幕上<font size="11">二郎山</font>
标签是不会被解释了,但二郎山的郎字又无法显示了。
因为这个汉字“郎”本身就已经是html实体了,所以编码或者解码,她的处理方式就和其他html标签是一样的。我想输出郎字,就必须要解码,但解码后同样会导致<这些符号被解码。
普通的字符“郎”的unicode码是37070,不是63788。两者之间还是有差别。
我想问的是如何将这个HTML实体编码的汉字转换为普通汉字,这样我就可以用HtmlEncode来处理其他html标签了?
12 个解决方案
#1
string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二郎山<font/>"));
Response.Write(content);
这样不行?
Response.Write(content);
这样不行?
#2
…… 不能先把二郎Decode 再把整个string Encode吗?
#3
这样不行,我当时就想到了。再encode就又变回去了。这个decode出来的郎字,和直接定义的郎字,unicode码貌似不一样。
#4
你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。
#5
string content = "<font size=\"11\">" + HttpUtility.HtmlDecode("二郎山") + "<font/>";
test.InnerText = content;
这样不行吗?
#6
如果要response.write输出
string content = HttpUtility.HtmlEncode("<font size=\"11\">") + HttpUtility.HtmlDecode("二郎山") + HttpUtility.HtmlEncode("<font/>");
string content = HttpUtility.HtmlEncode("<font size=\"11\">") + HttpUtility.HtmlDecode("二郎山") + HttpUtility.HtmlEncode("<font/>");
#7
6楼的肯定可以。
但这样的处理方式我个人不是很能接受。因为要对整个内容进行匹配和重新组装。
但这样的处理方式我个人不是很能接受。因为要对整个内容进行匹配和重新组装。
#8
replace("<","<").replace(">",">")
#9
恩,谢谢各位
其实仅仅只是处理web界面上的显示,我肯定是有办法的。
我其实最想达到的是这样的效果。
就是这个被Decode出来的“郎”,能够转换为真正的 “郎”字。(前面说了,这2种“郎”字的unicode码不一样,所以还是有区别的,被Decode出来的“郎”字再次Encode时会变回&#;的形式,而第2种“郎”字,无论Decode还是Encode都不会发生变化)
这样这个字以后再其他地方,无论如何处理都是不会出问题的。
其实仅仅只是处理web界面上的显示,我肯定是有办法的。
我其实最想达到的是这样的效果。
就是这个被Decode出来的“郎”,能够转换为真正的 “郎”字。(前面说了,这2种“郎”字的unicode码不一样,所以还是有区别的,被Decode出来的“郎”字再次Encode时会变回&#;的形式,而第2种“郎”字,无论Decode还是Encode都不会发生变化)
这样这个字以后再其他地方,无论如何处理都是不会出问题的。
#10
用正则把汉字(就是<font ……>和</font>中间的字)提取出来进行Decode替换回去行不?
#11
可以写个方法尝试replace方法替换掉有针对性的字符
#12
replace("<","<").replace(">",">")
#1
string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二郎山<font/>"));
Response.Write(content);
这样不行?
Response.Write(content);
这样不行?
#2
…… 不能先把二郎Decode 再把整个string Encode吗?
#3
string content = Server.HtmlEncode(Server.HtmlDecode("<font size=\"11\">二郎山<font/>"));
Response.Write(content);
这样不行?
这样不行,我当时就想到了。再encode就又变回去了。这个decode出来的郎字,和直接定义的郎字,unicode码貌似不一样。
#4
…… 不能先把二郎Decode 再把整个string Encode吗?
你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。
#5
…… 不能先把二郎Decode 再把整个string Encode吗?
你这个和#1楼的相法一样的,不行的哈。我在.NET和JAVA都测试了。
string content = "<font size=\"11\">" + HttpUtility.HtmlDecode("二郎山") + "<font/>";
test.InnerText = content;
这样不行吗?
#6
如果要response.write输出
string content = HttpUtility.HtmlEncode("<font size=\"11\">") + HttpUtility.HtmlDecode("二郎山") + HttpUtility.HtmlEncode("<font/>");
string content = HttpUtility.HtmlEncode("<font size=\"11\">") + HttpUtility.HtmlDecode("二郎山") + HttpUtility.HtmlEncode("<font/>");
#7
6楼的肯定可以。
但这样的处理方式我个人不是很能接受。因为要对整个内容进行匹配和重新组装。
但这样的处理方式我个人不是很能接受。因为要对整个内容进行匹配和重新组装。
#8
replace("<","<").replace(">",">")
#9
恩,谢谢各位
其实仅仅只是处理web界面上的显示,我肯定是有办法的。
我其实最想达到的是这样的效果。
就是这个被Decode出来的“郎”,能够转换为真正的 “郎”字。(前面说了,这2种“郎”字的unicode码不一样,所以还是有区别的,被Decode出来的“郎”字再次Encode时会变回&#;的形式,而第2种“郎”字,无论Decode还是Encode都不会发生变化)
这样这个字以后再其他地方,无论如何处理都是不会出问题的。
其实仅仅只是处理web界面上的显示,我肯定是有办法的。
我其实最想达到的是这样的效果。
就是这个被Decode出来的“郎”,能够转换为真正的 “郎”字。(前面说了,这2种“郎”字的unicode码不一样,所以还是有区别的,被Decode出来的“郎”字再次Encode时会变回&#;的形式,而第2种“郎”字,无论Decode还是Encode都不会发生变化)
这样这个字以后再其他地方,无论如何处理都是不会出问题的。
#10
用正则把汉字(就是<font ……>和</font>中间的字)提取出来进行Decode替换回去行不?
#11
可以写个方法尝试replace方法替换掉有针对性的字符
#12
replace("<","<").replace(">",">")