in src/main/java/org/apache/sling/engine/impl/parameters/Util.java [111:158]
static void fixEncoding(ParameterMap parameterMap) {
// default the encoding to defaultFixEncoding
String formEncoding = getDefaultFixEncoding();
// check whether a form encoding parameter overwrites this default
RequestParameter[] feParm = parameterMap.get(ParameterSupport.PARAMETER_FORMENCODING);
if (feParm != null) {
// get and check form encoding
byte[] rawEncoding = feParm[0].get();
formEncoding = toIdentityEncodedString(rawEncoding);
formEncoding = validateEncoding(formEncoding);
}
// map for rename parameters due to encoding fixes
LinkedHashMap<String, String> renameMap = new LinkedHashMap<String, String>();
// convert the map of lists to a map of arrays
for (Map.Entry<String, RequestParameter[]> paramEntry : parameterMap.entrySet()) {
RequestParameter[] params = paramEntry.getValue();
String parName = null;
for (int i = 0; i < params.length; i++) {
if (params[i] instanceof AbstractRequestParameter) {
AbstractRequestParameter param = (AbstractRequestParameter) params[i];
// fix encoding if different
if (!formEncoding.equalsIgnoreCase(param.getEncoding())) {
param.setEncoding(formEncoding);
// prepare the parameter for renaming
if (parName == null) {
parName = paramEntry.getKey();
String name = reencode(parName, formEncoding);
if (!parName.equals(name)) {
renameMap.put(parName, name);
}
}
}
}
}
}
// apply mappings of deinternationalized names
if (!renameMap.isEmpty()) {
for (Map.Entry<String, String> entry : renameMap.entrySet()) {
parameterMap.renameParameter(entry.getKey(), entry.getValue());
}
}
}