我有一个网络应用程序,其中包含一些超链接,用于将用户重定向到另一个页面,其中一些信息作为参数。更具体地说,我的超链接包括sql查询作为参数。
我是这样做的:
<a href="somepage.jsp?query=<%=stringSQLQuery%>"></a>
但是,每当我的sql查询包含通配符作为搜索词,如%时,我在日志文件中收到以下错误消息:
Character decoding failed. Parameter [string] with value ...
所以,我不认为我可以通过带有通配符的超链接传递SQL查询。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
您需要uri encode your parameters.
我认为这就是你想要的:
<a onclick='window.href.location = encodeURI("somepage.jsp?query=<%=stringSQLQuery%>");'>Click me</a>
此外,像这样传递SQL是一个 糟糕的坏主意 。任何人都可以访问您的数据库。
答案 1 :(得分:1)
网址在允许的字符中是限制性的。 %
是保留字符,表示URL编码字符的开头。
请求参数必须为URL-encoded。 JSTL <c:url>
和<c:param>
专为此工作而设计。
<c:url var="somepage" value="somepage.jsp">
<c:param name="query" value="${stringSQLQuery}" />
</c:url>
<a href="${somepage}">link</a>
正如大家所提到的,你在这里犯了一个巨大的设计错误,就是将SQL字符串作为请求参数传递。而是使用存储在某些Map
或RESTful URL中的固定命令。
答案 2 :(得分:0)
您可以使用超链接传递参数或值
例如: 我有一个页面display.html并传递参数a和b,其值分别为10和20。在锚标记中我们将href如下。
href="xyz.html?a=10&b=20"