【问题标题】:How to pass a parameter with non-ASCII characters in URL with JavaScript to JSP/Servlet?如何使用 JavaScript 将带有非 ASCII 字符的参数传递给 JSP/Servlet?
【发布时间】:2013-04-11 08:59:10
【问题描述】:

我在 WEB 上阅读了很多类似的问题,但没有一个解决方案对我有帮助。 当查询可以是希伯来语、英语或任何其他语言时,我使用搜索实现网页。 当用户单击“搜索”时,我使用 JavaScript 获取字段中的值并使用 Ajax 显示结果。 当用户单击“搜索”时,JavaScript 函数会向我的 JSP 文件发送一个新请求,而该查询作为参数发送。

您知道如何解决它吗?

JavaScript 中的相关行:

...  
request = new XMLHttpRequest();  
var url = "SearchResults.jsp?userID=" + userID + "&query=" + encodeURIComponent(query);  
alert("The query = " + query);  
alert("The url = " + url);   
request.open("GET", url, true);  
... 

第一个警报正确显示希伯来语,第二个警报显示 url 当查询参数编码为 %%.. 当我将其粘贴到 Google 搜索中时,它会正确地用希伯来语编写单词

服务器中的相关行:

...  
String userID = request.getParameter("userID");  
FbLogger.fbLogger.info(request.getParameter("query"));  
String query = URLDecoder.decode(request.getParameter("query"), "UTF-8");  
FbLogger.fbLogger.info("Entered as Manager with Params: userID = " + userID + " , query = " + query);       
...  

我将查询视为 ×?שר×?×?在我上面 2 条消息的日志中,用户 ID 已正确传递。

在我添加的每一页上:

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
<meta http-equiv="Content-Type" content="text/html; charset=charset=UTF-8">  
<script language="javascript" type="text/javascript" charset="utf-8" src="javascript/friendsSearch.js"></script> 

我还更改了Tomcat服务器(server.xml)中的配置:

<Connector port="8080" protocol="HTTP/1.1"  
        connectionTimeout="20000"  
        redirectPort="8443"  
        URIEncoding="UTF-8"/> 

【问题讨论】:

    标签: javascript ajax web-applications encoding url-parameters


    【解决方案1】:

    只需request.getParameter("query") 即可使用连接器属性。如果它不起作用,那么您的&lt;Connector&gt; 标签中的URIEncoding="UTF-8" 没有任何效果。

    请注意,您通过直接记录字符串增加了额外的复杂性步骤,记录器输出编码和日志阅读器也需要编码/解码步骤。而是搜索ל 并记录结果"ל".equals(request.getParameter("query")),这将是truefalse,并且只需要考虑URIEncoding。

    尝试将port="1337" 应用于相同的&lt;Connector&gt; 标记,看看您的服务器是否在localhost:1337 上工作。如果它在:1337 中确实有效,请尝试再次用希伯来语搜索。

    【讨论】:

    • 谢谢,我通过String q = new String(request.getParameter("query").getBytes("iso-8859-1"),"UTF-8");解决了这个问题,我猜是连接器坏了。我在记录之前也没有编码/解码,所以你的建议(使用 equals)有帮助!
    • @IrenaZuyev 是的,这是另一种选择,但你真的想为每个包含文本的参数写那行吗?
    • 不,我的下一步是通过按照您的建议更改端口来了解连接器为什么不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多