Author: ssolsagl Date: 2007-04-13 11:07:22 +0200 (Fri, 13 Apr 2007) New Revision: 4802
Modified: branches/2.11/war/src/webapp/tradedoubler/td_redirect.jsp Log: fixed url encoding. (Need refactoring) Modified: branches/2.11/war/src/webapp/tradedoubler/td_redirect.jsp =================================================================== --- branches/2.11/war/src/webapp/tradedoubler/td_redirect.jsp 2007-04-13 07:44:15 UTC (rev 4801) +++ branches/2.11/war/src/webapp/tradedoubler/td_redirect.jsp 2007-04-13 09:07:22 UTC (rev 4802) @@ -1,5 +1,72 @@ <%@ page import="no.schibstedsok.searchportal.util.TradeDoubler,java.net.URLEncoder" %> <%@ page import="no.schibstedsok.searchportal.datamodel.DataModel" %> +<%@ page import="java.net.URL" %> +<%@ page import="java.io.IOException" %> +<%@ page import="java.io.UnsupportedEncodingException" %> +<%@ page import="java.net.URLDecoder" %> +<%@ page import="java.net.URLEncoder" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Enumeration" %> +<%@ page import="java.util.HashMap" %> +<%@ page import="java.util.Hashtable" %> +<%@ page import="java.util.List" %> +<%@ page import="java.util.Locale" %> +<%@ page import="java.util.Map" %> +<%@ page import="java.util.Properties" %> +<%@ page import="java.util.StringTokenizer" %> +<%! + + // TODO This is cutnpaste from a private method in DataModelFilter. + // That function needs to be public and put in a requst helper class or similar. + // AndersJ ? + + /** A safer way to get parameters for the query string. + * Handles ISO-8859-1 and UTF-8 URL encodings. + * + * @param request The servlet request we are processing + * @param parameter The parameter to retrieve + * @return The correct decoded parameter + * + * @author <a href="mailto:[EMAIL PROTECTED]">Anders Johan Jamtli</a> + */ + static String getParameterSafely(final HttpServletRequest request, final String parameter){ + + final StringTokenizer st = new StringTokenizer(request.getQueryString(), "&"); + String value = request.getParameter(parameter); + String queryStringValue = null; + + final String parameterEquals = parameter + '='; + while(st.hasMoreTokens()) { + final String tmp = st.nextToken(); + if (tmp.startsWith(parameterEquals)) { + queryStringValue = tmp.substring(parameterEquals.length()); + break; + } + } + + if (null != value && null != queryStringValue) { + + try { + final String encodedReqValue = URLEncoder.encode(value, "UTF-8") + .replaceAll("[+]", "%20") + .replaceAll("[*]", "%2A"); + + queryStringValue = queryStringValue + .replaceAll("[+]", "%20") + .replaceAll("[*]", "%2A"); + + if (!queryStringValue.equalsIgnoreCase(encodedReqValue)){ + value = URLDecoder.decode(queryStringValue, "ISO-8859-1"); + } + + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e.getMessage()); + } + } + + return value; + } +%> <% final DataModel datamodel = (DataModel) session.getAttribute(DataModel.KEY); @@ -16,7 +83,7 @@ if (sitesearch == null) { sitesearch = ""; } - + if (request.getParameter("url") != null && request.getParameter("url").length() > 0) { response.sendRedirect(request.getParameter("url")); } else if (request.getParameter("URL") != null && request.getParameter("URL").length() > 0) { @@ -44,7 +111,7 @@ String q = request.getParameter("q"); if (q != null) { - q = java.net.URLEncoder.encode(q, "UTF-8"); + q = getParameterSafely(request, "q"); } else { q = ""; } _______________________________________________ Kernel-commits mailing list [email protected] http://sesat.no/mailman/listinfo/kernel-commits
