diff --git a/htroot/yacysearch.html b/htroot/yacysearch.html index a3df1c19a..aa560b981 100644 --- a/htroot/yacysearch.html +++ b/htroot/yacysearch.html @@ -3,7 +3,7 @@ #[former]# - YaCy '#[clientname]#': Search Page #%env/templates/metas.template%# - + diff --git a/htroot/yacysearch.java b/htroot/yacysearch.java index fd8e604e1..a63260899 100644 --- a/htroot/yacysearch.java +++ b/htroot/yacysearch.java @@ -28,6 +28,9 @@ // if the shell's current path is HTROOT import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.ConcurrentModificationException; @@ -852,7 +855,14 @@ public class yacysearch { } prop.put("focus", focus ? 1 : 0); // focus search field prop.put("searchagain", global ? "1" : "0"); - prop.putHTML("former", originalquerystring.replaceAll(Segment.catchallString, "*")); + String former = originalquerystring.replaceAll(Segment.catchallString, "*"); + prop.putHTML("former", former); + try { + prop.put("formerEncoded", URLEncoder.encode(former, StandardCharsets.UTF_8.name())); + } catch (UnsupportedEncodingException e) { + ConcurrentLog.warn("LOCAL_SEARCH", "Unsupported UTF-8 encoding!"); + prop.put("formerEncoded", former); + } prop.put("count", itemsPerPage); prop.put("offset", startRecord); prop.put("resource", global ? "global" : "local"); @@ -877,4 +887,8 @@ public class yacysearch { // return rewrite properties return prop; } + + public static void main(String args[]) throws UnsupportedEncodingException { + System.out.println(URLEncoder.encode("aao?+ bbibu", StandardCharsets.UTF_8.name())); + } } diff --git a/htroot/yacysearchtrailer.java b/htroot/yacysearchtrailer.java index d60994fa7..a2f8d74a3 100644 --- a/htroot/yacysearchtrailer.java +++ b/htroot/yacysearchtrailer.java @@ -110,7 +110,8 @@ public class yacysearchtrailer { name = navigatorIterator.next(); count = theSearch.namespaceNavigator.get(name); if (count == 0) break; - nav = "inurl%3A" + name; + /* We use ':' character here, it will be percent encoded later, in QueryParams.navurl() function*/ + nav = "inurl:" + name; if (!theSearch.query.modifier.toString().contains("inurl:"+name)) { pos++; prop.put("nav-namespace_element_" + i + "_on", 1); @@ -317,7 +318,7 @@ public class yacysearchtrailer { prop.put("nav-topics_element_" + i + "_on", 1); prop.put(fileType, "nav-topics_element_" + i + "_modifier", name); prop.put(fileType, "nav-topics_element_" + i + "_name", name); - prop.put(fileType, "nav-topics_element_" + i + "_url", QueryParams.navurl(fileType, 0, theSearch.query, name, false).toString()); + prop.put("nav-topics_element_" + i + "_url", QueryParams.navurl(fileType, 0, theSearch.query, name, false).toString()); prop.put("nav-topics_element_" + i + "_count", count); int fontsize = TOPWORDS_MINSIZE + (TOPWORDS_MAXSIZE - TOPWORDS_MINSIZE) * (count - mincount) / (1 + maxcount - mincount); fontsize = Math.max(TOPWORDS_MINSIZE, fontsize - (name.length() - 5)); diff --git a/source/net/yacy/search/query/QueryParams.java b/source/net/yacy/search/query/QueryParams.java index aac1a2866..3a27dd74e 100644 --- a/source/net/yacy/search/query/QueryParams.java +++ b/source/net/yacy/search/query/QueryParams.java @@ -26,6 +26,9 @@ package net.yacy.search.query; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -702,7 +705,7 @@ public final class QueryParams { if (!newModifier.isEmpty()) { if (!theQuery.modifier.isEmpty()) sb.append("+" + theQuery.modifier.toString()); if (newModifierReplacesOld) { - int nmpi = newModifier.indexOf("%3A"); + int nmpi = newModifier.indexOf(":"); if (nmpi > 0) { String nmp = newModifier.substring(0, nmpi) + ":"; int i = sb.indexOf(nmp); @@ -710,7 +713,11 @@ public final class QueryParams { if (sb.charAt(sb.length() - 1) == '+') sb.setLength(sb.length() - 1); } } - sb.append("+" + newModifier); + try { + sb.append("+" + URLEncoder.encode(newModifier, StandardCharsets.UTF_8.name())); + } catch (final UnsupportedEncodingException e) { + sb.append("+" + newModifier); + } } }