in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/URIManipulationFilterExtension.java [226:279]
private String getEscapedQuery(RuntimeObjectModel runtimeObjectModel, String originalQuery, Map<String, Object> options) {
// parse parameters
Map<String, Collection<String>> parameters = new LinkedHashMap<>();
if (StringUtils.isNotEmpty(originalQuery)) {
String[] keyValuePairs = originalQuery.split("&");
for (String keyValuePair : keyValuePairs) {
String[] pair = keyValuePair.split("=");
if (pair.length == 2) {
String param;
try {
param = URLDecoder.decode(pair[0], StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
LOG.warn("Could not decode parameter key '{}'", pair[0], e);
continue;
}
String value;
try {
value = URLDecoder.decode(pair[1], StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
LOG.warn("Could not decode parameter value of parameter '{}': '{}'", param, pair[1], e);
continue;
}
Collection<String> values = parameters.get(param);
if (values == null) {
values = new ArrayList<>();
parameters.put(param, values);
}
values.add(value);
}
}
}
if (handleParameters(runtimeObjectModel, parameters, options)) {
if (!parameters.isEmpty()) {
try {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Collection<String>> entry : parameters.entrySet()) {
for (String value : entry.getValue()) {
sb.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8.name())).append("=")
.append(URLEncoder.encode(value, StandardCharsets.UTF_8.name())).append("&");
}
}
// delete the last &
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
} catch (UnsupportedEncodingException e) {
throw new SightlyException("Could not encode the parameter values/keys", e);
}
} else {
return null;
}
}
return originalQuery;
}