如何去除Umbraco CMS添加脚本时自动生成的多余斜杠
解决Umbraco中内联脚本自动生成多余斜杠的问题
嘿,这个问题我太熟悉了!Umbraco用的Razor视图引擎默认会对输出的内容做HTML编码,这就是为啥你脚本里的斜杠会被转义成\/这种多余的格式。别担心,有两个简单的办法可以解决:
方法1:用Html.Raw()绕过自动编码
Razor的自动编码是为了安全,但对于你自己写的内联脚本来说,我们可以明确告诉它这段内容不需要编码。修改你的代码如下:
@inherits Umbraco.Web.Macros.PartialViewMacroPage @Html.Raw(@" <script> $(document).ready(function() { if ($(""html"").attr(""lang"") == ""ar-AE"") { $("".globe"").attr('href', '/about-us/'); } else { $("".globe"").attr('href', '/من-نحن/'); } }); </script> ")
这里用了C#的逐字字符串(@开头的字符串),避免了引号转义的麻烦,同时Html.Raw()会直接输出内容,不会对斜杠、引号这些字符进行编码。
方法2:把脚本移到单独的JS文件(推荐)
如果项目允许,更规范的做法是把这段逻辑抽离到独立的JavaScript文件中,比如lang-switch.js,然后在视图里引用它:
@inherits Umbraco.Web.Macros.PartialViewMacroPage <script src="/scripts/lang-switch.js"></script>
在lang-switch.js里写你的逻辑:
$(document).ready(function() { if ($("html").attr("lang") == "ar-AE") { $(".globe").attr('href', '/about-us/'); } else { $(".globe").attr('href', '/من-نحن/'); } });
这种方式不仅避免了编码问题,还让代码更易维护、更符合前端最佳实践,也方便后续复用这段逻辑。
为什么会出现这个问题?
Umbraco的Razor视图默认会对所有输出的内容进行HTML编码,目的是防止XSS攻击。但这会把像/、"这类字符转义成HTML实体,导致你的脚本URL里出现多余的斜杠。用Html.Raw()或者外部JS文件,就能绕过这个自动编码的行为。
内容的提问来源于stack exchange,提问作者Guruprakash
相关产品推荐
相关产品推荐

