换行转<br/>与HTML特殊字符编码在Word导出时的冲突如何解决?
冲突解决方法
- 核心问题:两个处理逻辑的执行顺序错误。先将换行替换为
<br/>再执行HTML编码的操作,会将<br/>标签中的<、>符号一并编码为<、>,最终变成无法被HTML解析的普通文本。 - 最优解决方案:调整两个逻辑的执行顺序,先对原始文本做HTML特殊字符编码,再将编码后文本中的换行符替换为
<br/>标签,此时生成的<br/>不会被二次编码,可正常生效。
修正后代码示例:
if (!String.IsNullOrEmpty(dataValue)) { // 先编码所有HTML特殊字符 dataValue = WebUtility.HtmlEncode(dataValue); // 再替换换行符为<br/>标签 dataValue = dataValue.Replace("\r\n", "<br/>").Replace("\n", "<br/>"); } table.Add("<%"+ data.TagName + "%>", dataValue); // 后续模板替换逻辑无需重复编码 string character = (string)table[tag]; subject = subject.Replace(tag, character); body = body.Replace(tag, character);
- 兼容方案:如果受现有架构限制无法调整全局处理顺序,可在HTML编码完成后手动还原被编码的换行标签:
string character = (string)table[tag]; character = WebUtility.HtmlEncode(character); // 还原被编码的<br/>标签 character = character.Replace("<br/>", "<br/>"); subject = subject.Replace(tag, character); body = body.Replace(tag, character);
内容的提问来源于stack exchange,提问作者Sameera Athukorala
相关产品推荐
相关产品推荐

