我想在 c:out 内的 EL 内调用 fn:replace 来替换引号字符。
以下不起作用
<c:out value="${fn:replace(userName,'"','\\"')}"/>
因为 XML 解析器在第一个双引号处停止并且看不到 c:cout 标记终止(JSP 编译阶段错误)。
下列
<c:out value="${fn:replace(userName,'"','\\"')}"/>
不起作用,可能是因为替换函数没有看到实际的引号字符。
最佳答案
用 <c:set>
参数化它们.
<c:set var="search" value='"' />
<c:set var="replace" value='\\"' />
<c:out value="${fn:replace(userName, search, replace)}"/>
无关 具体的问题,你还没有吗considered一个真正的 JSON 生成器?例如,对于 Gson,考虑到
user
,这是以下 oneliner 的问题是一个完整的Javabean:String json = new Gson().toJson(user);
您将直接获得语法上有效的 JSON,而无需摆弄所有让 JSP/JSTL/EL 生成有效 JSON 的方法。
关于escaping - 如何在 JSTL/EL 表达式中同时使用单引号和双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898815/