1

我在 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"/> 
4

1 回答 1

1

使用连接器属性就request.getParameter("query")足够了。如果它不起作用,那么URIEncoding="UTF-8"你的<Connector>标签中的 没有任何效果。

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

尝试应用port="1337"到相同的<Connector>标签,看看你的服务器是否工作在localhost:1337. 如果它确实有效:1337,请尝试再次用希伯来语搜索。

于 2013-04-11T09:23:31.290 回答