2012-04-10 53 views
0

全部傳遞url參數從Java servlet到Perl的空間

我有一個java servlet程序來調用perl並從perl接收數據。我用

String urlString = "http://[hostname]:[port]/cgi-bin/perl.pl?city="+city+"&chain="+chain; 
URL url = new URL(urlString); 
URLConnection urlConnection = url.openConnection(); 
urlConnection.setAllowUserInteraction(false); 
InputStream urlStream = url.openStream(); 

爲URL打Perl和Perl的側面,使用

my $city = param("city"); 
my $chain = param("chain"); 
my $url_temp = "http://www.tripadvisor.com/Search?q=${chain}+${city}"; 

兩個servlet和perl的工作與抓城市價值的GET參數以及但是,對於「洛杉磯」和「紐約」,沒有空間的城市名稱,我不能想出一個解決方案,使其工作。 我試過string.replace('','+'),它什麼都沒返回;用%20替換會使程序出錯

任何想法,將不勝感激。

+0

你真的應該將其追加到URL之前URLEncode的查詢字符串。空間確實會轉換成'%20'。該計劃給了什麼錯誤? – Konerak 2012-04-10 08:51:10

+0

你是什麼意思我試過string.replace('','+'),它什麼都不返回?只要你忘記了,記住String是不可變的,所以你應該做一些類似string = string.replace('','+')的事情。實現這一切的最好方法是使用'URLEncoder.encode()'作爲查詢參數和查詢值,其中包括將''轉換爲'+' – 2012-04-10 08:51:13

回答

0

像Konerak和紀堯姆說,使用URL編碼...

// first 
try { 
    city = URLEncoder.encode(city, "UTF-8"); 
    chain = URLEncoder.encode(chain, "UTF-8") 
} catch (Exception e) {} 

// now your code 
String urlString = "http://[hostname]:[port]/cgi-bin/perl.pl?city="+city+"&chain="+chain; 
URL url = new URL(urlString); 
URLConnection urlConnection = url.openConnection(); 
urlConnection.setAllowUserInteraction(false); 
InputStream urlStream = url.openStream();