我正在构建一个Android应用程序,我需要将应用程序的一部分发布到包含一些表单数据的网址。我传递的表单字段之一是电子邮件地址。
我注意到一个问题,其中一些电子邮件地址中有一个“+”符号,这是URL中的保留字符,意思是''。我想知道,在将其转换为post byte []之前,我如何在代码中清理/转义此类字符和其他字符。我不想做一个replaceAll。是否有一个内置于Java中的特定编码器可以执行此操作?
以下是我使用的代码:
StringBuilder builder = new StringBuilder();
builder.append(ID + "=" + params.id + "&");
builder.append(LOCALE + "=" + params.locale + "&");
builder.append(EMAIL + "=" + params.getEmail());
String encodedParams = builder.toString();
mWebView.postUrl(URL, EncodingUtils.getAsciiBytes(encodedParams));
答案 0 :(得分:2)
尝试使用java.net.URLEncoder.encode(valueToEncode," UTF-8");
自从我查看了详细信息以来已经有一段时间了,但我相信在连接它们之前必须在字符串的各个部分调用encode()。
下面的实用方法对我来说效果很好:
/**
* Given a {@link Map} of keys and values, this method will return a string
* that represents the key-value pairs in
* 'application/x-www-form-urlencoded' MIME format.
*
* @param keysAndValues
* the keys and values
* @return the data in 'application/x-www-form-urlencoded' MIME format
*/
private String wwwFormUrlEncode(Map<String, String> keysAndValues) {
try {
StringBuilder sb = new StringBuilder();
boolean isFirstEntry = true;
for (Map.Entry<String, String> argument : keysAndValues.entrySet()) {
if (isFirstEntry) {
isFirstEntry = false;
} else {
sb.append("&");
}
sb.append(URLEncoder.encode(argument.getKey(), "UTF-8"));
sb.append("=");
sb.append(URLEncoder.encode(argument.getValue(), "UTF-8"));
}
return sb.toString();
} catch (UnsupportedEncodingException e) {
//it is unlikely that the system does not support UTF-8 encoding,
//so we will not bother polluting the method's interface with a checked exception
throw new RuntimeException(e);
}
}
答案 1 :(得分:0)
用%2b替换加号。你必须编码它才能在url中使用它,否则它将被视为空格。然后在你的服务器端你可以html解码电子邮件。