ASP.NET运行时无法为按钮设置含特殊字符文本问题求助
核心解决思路
不要手动对Button的Text属性做Html编码,直接赋值原始的带特殊字符的字符串即可。
原因分析
- ASP.NET的
Label控件默认不会自动对Text属性进行Html编码,所以手动调用HtmlEncode后,浏览器能正确解析显示特殊字符。 - 而
Button控件在渲染到页面时,会自动对Text属性执行Html编码操作。如果提前手动编码,就会导致双重编码(比如é被再次编码成é),最终浏览器显示的是编码后的实体字符,而非预期的特殊字符。
修改后的代码示例
protected void Page_Load(object sender, EventArgs e) { string text = "élèves"; // 使用原始带特殊字符的字符串,不手动编码 // Label若需防XSS则手动编码,否则可直接赋值 Label1.Text = System.Net.WebUtility.HtmlEncode(text); // Button直接赋值原始字符串,控件会自动处理编码 Button1.Text = text; }
如果无需考虑XSS风险,Label也可以直接赋值原始字符串:
protected void Page_Load(object sender, EventArgs e) { string text = "élèves"; Label1.Text = text; Button1.Text = text; }
补充说明
设计时直接设置Button的Text为élèves能正常显示,是因为设计阶段的Html实体标记会被ASP.NET先解析为对应的字符,渲染时再执行一次正确的编码,不会触发双重编码问题。
内容的提问来源于stack exchange,提问作者user15759356
相关产品推荐
相关产品推荐

