You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSTL fn:escapeXml转义路径报错:无效Unicode转义序列求助

问题修复方案

你的问题核心在于fn:escapeXml的作用边界——它仅负责转义HTML/XML特殊字符(如<、>、&),完全不处理JavaScript的特殊字符(比如反斜杠\)。而JavaScript中\u是Unicode转义序列的起始标识,原字符串里的\university会被解析器判定为无效转义,直接抛出语法错误。

以下是两种可行的修复方案:

方案1:用JSTL的fn:replace转义反斜杠

直接在现有代码基础上嵌套fn:replace,把单个反斜杠替换为JavaScript可识别的双反斜杠:

function setLocation() {
    var fullPath = "${fn:replace(fn:escapeXml(folderPath), '\\', '\\\\')}";
    updateFolderPath(fullPath);
}
  • 说明:JSP中'\\'会被解析为单个\,'\\\\'会被解析为两个\\;替换后原字符串里的\会变成\\,JavaScript解析时会将其视为普通反斜杠字符,不会触发转义错误。

方案2:自定义EL函数(适合频繁使用场景)

如果项目中需要多次处理JS字符串转义,可以封装自定义EL函数统一处理:

  1. 编写Java工具类:
public class JsEscapeUtils {
    public static String escapeJs(String input) {
        if (input == null) return null;
        return input.replace("\\", "\\\\")
                    .replace("'", "\\'")
                    .replace("\"", "\\\"")
                    .replace("\n", "\\n")
                    .replace("\r", "\\r");
    }
}
  1. 在WEB-INF下创建tld文件(如custom-functions.tld)注册函数:
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1">
    <tlib-version>1.0</tlib-version>
    <short-name>custom</short-name>
    <uri>http://example.com/custom-functions</uri>
    <function>
        <name>escapeJs</name>
        <function-class>com.yourpackage.JsEscapeUtils</function-class>
        <function-signature>java.lang.String escapeJs(java.lang.String)</function-signature>
    </function>
</taglib>
  1. 在JSP页面引入并使用:
<%@ taglib prefix="custom" uri="http://example.com/custom-functions" %>
function setLocation() {
    var fullPath = "${custom:escapeJs(folderPath)}";
    updateFolderPath(fullPath);
}

内容的提问来源于stack exchange,提问作者Ram Somani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:21:01