我的JSP中有以下代码。除了"&" 之外,UI会正确显示每个字符。
<c:out value="<script>var escapedData=unescape('${column}');
$('div').html(escapedData);</script>" escapeXml="false" /> </div>
E.g。 1)工作案例
input = ni!er@
我的escapedData
变量中的值为 ni%21er%40
。现在当我把它放在div
使用时
$('div').html(escapedData);
然后html上的o / p按预期
E.g。 2)发行案例
input = nice&
我的escapedData
变量中的值为nice%26
。现在当我把它放在div
使用时
$('div').html(escapedData);
然后它也显示在下面
$('#test20').html('nice%26');
然而,当输出显示在JSP中时,它只会打印&#34; nice&#34; 。 截断 &
之后的所有内容。
有什么建议吗?
答案 0 :(得分:0)
您似乎对unescape(val)
/ escape(val)
所做的以及您需要它们的地方有一些误解。当您使用.html()
时需要注意的事项。
HTML 和 URI 具有一定的特殊含义。最重要的是:
HTML :<
,>
,&
URI :/
,?
,%
,&
如果您想在 HTML 或 URI 中使用其中一个字符,则需要将其转义。
功能unescape
/ escape
(已弃用)和decodeURI
/ endcodeURI
适用于 URI 。但您想要的是将数据转换为 HTML 格式。
in_JS_中没有内置函数可以执行此操作,但您可以使用使用此问题的答案代码Can I escape html special chars in javascript?。
但是,由于您似乎使用jQuery,因此您可以考虑使用.text
代替.html
,因为这会为您进行转义。
附加说明:
我很确定var escapedData=unescape('${column}');
没有做任何事情。我假设${column}
已经是ni!er@
/ nice&
。
所以请检查您的源代码。如果var escapedData=unescape('${column}');
看起来像var escapedData=unescape('ni!er@');
,那么您应该移除unescape
,否则如果${column}
包含类似的内容,则无法获得预期结果%23
。