簡體   English   中英

在HttpClient請求的URL中轉義&符號

[英]Escaping ampersands in URLs for HttpClient requests

所以我有一些使用Jakarta HttpClient的Java代碼:

URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());

問題是如果title包含任何&符號(&),它們被認為是參數分隔符,請求變得棘手......如果我用URL轉義的等價物%26替換它們,那么這將被getEscapedPathQuery雙重轉義( )進入%2526

我目前正在通過基本修復損壞來解決這個問題:

URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));

to be a nicer way to do this, right? 但是有一個更好的方法來做到這一點,對吧? 請注意,標題可以包含任意數量的不可預測的UTF-8字符等,因此必須轉義其他所有字符。

干得好:

import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());

查看java.net.URLEncoder以獲取更多信息。

如果你不想逃避,為什么要調用getEscapedPathQuery()? 只需確定誰的責任並保持一致。

使用URLEncoder類。

HTML表單編碼的實用程序類。 此類包含用於將String轉換為application / x-www-form-urlencoded MIME格式的靜態方法。 有關HTML表單編碼的更多信息,請參閱HTML規范。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM