繁体   English   中英

使用UrlEncode在Apachi Http Client表单中正确编码百分号(%)

[英]Properly encoding percent sign (%) in Apachi Http Client form post using UrlEncode

这似乎是一个非常简单的问题,但是a,我无法解决,也无法在其他任何地方找到解决方案。 我正在串联一个包含%的字符串,由于某种原因,它在%之后添加了数字25。 有人知道解决这个简单问题的方法吗?

String buttonCheck = "%26" + DATABASE.getValue("buttonCheck") + "%26";

出来

"%2526value%2526"

编辑:很明显,问题实际上在URL编码内,我将向问题添加更多相关数据。

我正在开发一个Android应用程序,该程序可以解析网站中的HTML,并允许用户通过Android UI与之交互。 我在将%编码为表单的参数时遇到问题。

public class CLASS extends Activity
{
     DefaultHttpClient client = new DefaultHttpClient;
     String url = "http://www.url.com"
     HttpRequestBase method = new HttpPost(url);
     List<NameValuePair> nvps = new ArrayList<NameValuePair>();
     nvps.add("buttoncheck", "%26" + DATABASE.getValue("buttonCheck") + "%26");
     //DATABASE is simply a class that handles a HashMap

     HttpPost methodPost = (HttpPost) method;
     methodPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
     execute(method);
}

而不是发送表单值

buttoncheck=%26value%26

我明白了

buttoncheck=%2526value%2526

buttonCheck ,它将不会显示为“%2526value%2526”。 我强烈怀疑您稍后会查看一个值-例如,在URI编码之后。 找出正在执行的编码方式以及您实际要编码的内容。

需要明确的是,25与26是完全不同的。如果完全摆脱26,您会看到相同的事情,

String buttonCheck = "%" + DATABASE.getValue("buttonCheck") + "%";

那时我怀疑你会得到

%25value%25

基本上,只是将%编码为%25。 例如,这样做:

import java.net.*;

public class Test {
    public static void main(String[] args) throws Exception {
        String input = "%value%";
        String encoded = URLEncoder.encode(input, "utf-8");
        System.out.println(encoded); // Prints %25value%25
    }
}

根据对这个问题的回答,我猜想您的字符串中的文字%已被编码为%25 其中解释了添加的25 如果没有看到相关的代码,我们将无法知道为什么它首先到达那里。

当字符串成为URI的一部分时,显然经过了“百分比编码”。

如果是这种情况,您不应该提早进行百分比编码。 代替

String buttonCheck = "&" + DATABASE.getValue("buttonCheck") + "&";

将以URI结尾

"%26value%26"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM