如何在JSTL/EL表达式中使用单引号和双引号?

Dim*_*ims 4 quotes jstl escaping el

我想调用fn:在c里面替换EL:out来替换引用字符.

以下不起作用

<c:out value="${fn:replace(userName,'"','\\"')}"/>
Run Code Online (Sandbox Code Playgroud)

因为XML解析器在第一个双引号处停止并且看不到c:cout标记终止(JSP编译阶段错误).

下列

<c:out value="${fn:replace(userName,'&quot;','\\&quot;')}"/>
Run Code Online (Sandbox Code Playgroud)

不起作用,可能是因为替换功能没有看到实际引用字符.

Bal*_*usC 6

使用参数化它们<c:set>.

<c:set var="search" value='"' />
<c:set var="replace" value='\\"' />
<c:out value="${fn:replace(userName, search, replace)}"/>
Run Code Online (Sandbox Code Playgroud)

具体问题无关,您还没有考虑过真正的JSON生成器吗?以Gson为例,它是以下oneliner的问题,因为这user是一个值得尊敬的Javabean:

String json = new Gson().toJson(user);
Run Code Online (Sandbox Code Playgroud)

您将直接获得语法上有效的JSON,而无需摆弄所有方法来使JSP/JSTL/EL生成有效的JSON.