2016-07-08 16 views
-1

Für jede Anforderung an dem Server in meinem android app ich Parameter codieren müssen, so dass für URL meines String sieht aus wieSoll ich URLEncoder für jede URL parametr

"http://example.com/script.php?param1="+URLEncoder.encode(param1.getText().toString(), "UTF-8")+"param2="+URLEncoder.encode(param2.getText().toString(), "UTF-8")+...." 

Es funktioniert, aber vielleicht ist es möglich, zu verwenden, URLEncoder.encode nur einmal - wie dies

URLEncoder.encode("http://example.com/script.php?param1="+param1.getText().toString()+"param2="+param2.getText().toString()+....", "UTF-8") 

Wäre es in Ordnung sein oder es gibt einige Fälle, in denen es zum Absturz bringen kann?

+0

es ist nicht möglich, auf die gesamte vollständige URL zu codieren ... Nur der Parameter encode –

Antwort

1

URL des gesamten URL-Codierung wird nicht funktionieren, weil es in so etwas wie

"http%3A%2F%2Fexample.com%2Fscript.php%3Fparam1%3Dasdf%26param2%3Djkl" 

das heißt alle Sonderzeichen in der gesamten URL codiert werden würden führen würde. Sie können die gesamte Abfragezeichenfolge auch nicht per URL codieren, da die Zeichen = und & codiert wären.

Sie müssen jeden Parameterwert codieren, um Sonderzeichen in dem Parameter zu stoppen, der die URL-Analyse beeinträchtigt. Eine Hilfsfunktion kann den Schmerz reduzieren.

String url = "http://example.com/script.php?" + encodeArgs("a", "a + b", "b", "=xxx="); 

und etwas, das Sie

begann zu bekommen
public String encodeArgs(String... args) { 
    final String encoding = "UTF-8"; 
    try { 
     if (args.length % 2 != 0) { 
      throw new IllegalArgumentException("number of arguments not even"); 
     } 

     StringBuffer sb = new StringBuffer(); 
     for (int i = 0; i < args.length; i += 2) { 
      sb.append(URLEncoder.encode(args[i], encoding)); 
      sb.append("="); 
      sb.append(URLEncoder.encode(args[i + 1], encoding)); 
      sb.append("&"); 
     } 

     // delete last &, if any 
     if (sb.length() > 0) { 
      sb.deleteCharAt(sb.length() - 1); 
     } 

     return sb.toString(); 

    } catch (UnsupportedEncodingException e) { 
     throw new IllegalArgumentException("unsupported encoding " + encoding, e); 
    } 
} 
1

Sie sollten nicht kodieren vollständige URL. Codiere nur Param-Abschnitte oder nur Teile davon, die aus "unzuverlässigen Quellen" stammen.

So ist Ihr erster Versuch "http://example.com/script.php?param1="+URLEncoder.encode(param1.getText().toString(), "UTF-8")+"param2="+URLEncoder.encode(param2.getText().toString(), "UTF-8")+...." korrekt, und Sie sollten damit fortfahren.


URL encoding in Android und Android: howto parse URL String with spaces to URI object? können für mehr Klarheit nützlich sein.