簡體   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