如何用JavaScript将URL中的非ascii字符参数传递给JSP/Servlet

How to pass a parameter with non-ASCII characters in URL with JavaScript to JSP/Servlet?

本文关键字:参数传递 字符 JSP Servlet ascii JavaScript 何用 URL      更新时间:2023-09-26

我在网上看过很多类似的问题,但没有一个解决方案对我的情况有帮助。我实现网页搜索,当查询可以是希伯来语,英语或任何其他语言。当用户单击"search"时,我使用JavaScript获取字段中的值,并使用Ajax显示结果。当用户单击"search"时,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。当我把它粘贴到谷歌搜索中它会正确地用希伯来语写这个词

服务器中的相关行:

...  
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条消息,userID是正确传递的。

在每一页我添加:

<%@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"/> 

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

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

尝试将port="1337"应用于相同的<Connector>标记,看看您的服务器是否可以从localhost:1337工作。如果它从:1337工作,尝试在希伯来语再次搜索。