0

我有一个 Web 应用程序,其中包含一些超链接,这些超链接将用户重定向到另一个页面,其中包含一些信息作为参数。更具体地说,我的超链接包含 sql 查询作为参数。

我这样做是这样的:

<a href="somepage.jsp?query=<%=stringSQLQuery%>"></a>

但是,每当我的 sql 查询将通配符作为搜索词(例如 %)时,我都会在日志文件中收到以下错误消息:

Character decoding failed. Parameter [string] with value ...

差不多,我认为我不能通过带有通配符的超链接传递 SQL 查询。我能做些什么来解决这个问题?

4

3 回答 3

1

你需要对你的参数进行uri编码。

我认为这就是你想要的:

<a onclick='window.href.location = encodeURI("somepage.jsp?query=<%=stringSQLQuery%>");'>Click me</a>

看到这个jsfiddle

此外,像这样传递 SQL 是一个坏坏坏主意。任何人都可以访问您的数据库。

于 2012-04-25T22:25:08.623 回答
1

URL 对允许的字符有限制。这%是一个保留字符,指示 URL 编码字符的开始。

请求参数必须是URL 编码的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 中的固定命令。

于 2012-04-25T22:34:43.090 回答
0

您可以使用超链接传递参数或值

例如:我有一页 display.html 并传递参数 a 和 b 并且分别有值 10 和 20。在锚标记中,我们将 href 如下。

                      href="xyz.html?a=10&b=20"
于 2015-09-22T16:17:38.620 回答