ASP.NET Core Razor视图本地化输出引号截断问题求助
解决Razor视图中本地化文本含单引号导致HTML属性截断的问题
这个问题很常见,根源就是你用单引号包裹了title属性值,而法语翻译文本里的单引号和属性的闭合单引号冲突了——浏览器会把第一个遇到的单引号当成属性值的结束标记,后面的内容自然就被截断了。给你几个实用的解决方案:
方法1:改用双引号包裹title属性
这是最简单直接的办法,HTML属性本身支持单引号或双引号包裹,把代码里的单引号换成双引号就行:
<abbr title="@Localizer["AnswerTip"]"> <label asp-for="MyModelField" class="control-label"></label> </abbr>
这样即使本地化文本里有单引号(比如法语的L'aide),双引号作为属性的边界,不会和文本内的单引号冲突,浏览器能完整识别整个title值。
方法2:对本地化文本进行HTML属性编码
如果因为某些原因必须用单引号包裹属性,那可以通过Html.AttributeEncode方法把文本里的特殊字符转成HTML实体(比如单引号会转成'),确保属性值不会被截断:
<abbr title='@Html.AttributeEncode(Localizer["AnswerTip"])'> <label asp-for="MyModelField" class="control-label"></label> </abbr>
这种方法更通用,不管文本里有哪种HTML特殊字符(比如双引号、尖括号),都能被正确转义,避免解析错误。
不推荐的方法:在资源文件中转义单引号
虽然可以在翻译资源里把单引号写成\'或者'',但这种方式不建议——翻译人员不需要关心HTML的转义规则,而且会让资源文件的内容变得不直观,后续维护也麻烦。转义逻辑应该放在视图层处理,保持资源文件的纯净性。
你可以根据自己的场景选第一种或第二种方法,亲测都能解决你的问题~
内容的提问来源于stack exchange,提问作者Jean-Marc
相关产品推荐
相关产品推荐

