我对单引号有疑问,从 java 发送一个词(例如:patte')到 html(freemarker),然后在“onClick”js 函数上使用该变量
我已经尝试在 java 中进行额外的转义,但变量 display 将包含 '\'(patte\'t)。 onClick 在这种情况下工作正常。 如果我在 Java 中使用简单的转义,变量显示很好,但 onClick deos 不起作用(参数如:onClick('patte')),在这种情况下我得到了一个错误。
<tr id="contactList" onclick="Ws('${contact.id!''}','${contact.name!''}');">
some <td>
</tr>
contact.name contains a single quote in his value
ex:
Java send: pette't
html displays: pette't
onClick: error(onClick('patte't'))
Thanks everyone
最佳答案
在这种情况下需要两层转义:JavaScript 字符串转义,然后是 HTML 转义。
对于 JavaScript 字符串转义,使用 ?js_string
.有了它,你会得到类似 onclick="Ws('someId', 'patte\'t')"
的东西.如果名称包含 "
,那仍然会被破坏,因为这将关闭 HTML 属性值,尽管 ?js_string
将转义为 \"
(因为 \
在 HTML 中没有特殊含义)。所以第二层是HTML转义,会替换"
与 "
等等。好的做法是在生成 HTML 页面时打开 HTML 自动转义;如果它没有在应用程序级别打开,请将其打开。 (如果不能,则使用 <#ftl output_format='HTML'>
启动模板。)
关于javascript - freemarker、java和javascript之间的引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58819493/