2014-12-03 145 views
0

我在我的struts 2應用程序中遇到了有關url編碼的問題。我做了一些研究,但找不到正確的方法來做到這一點。避免網址編碼

我的應用程序動態準備url並通過查詢數據庫來獲取變量。我很期待有效的URL是
http://www.test.com/language=english&numbers=X,Y,Z

但是,當因爲URL編碼的UI我得到的網址如下
http://www.test.com/language=english&numbers=X%2CY%2CZ

號是單變量和數據庫返回的值X, Y,Z。

我準備的URL在JSP如下

<s:url id="testUrl" escapeAmp="false" value="http://www.test.com"> 
    <s:param name="language" value="%{'english'}" /> 
    <s:param name="numbers" value="%{Num}" /> 
</s:url> 

我曾嘗試編碼= 「假」S:URL標籤,但無濟於事。

的testUrl被超鏈接如下

<a href="<s:property value="#testUrl" />" target="_blank"> 
    <s:property value="#Num" /> 
</a> 

我明白逗號(,)是一個保留字和應進行編碼。然而,在我的URL我需要這個逗號,以便點擊時成功執行網址。 我使用字符集iso-8859-1

+0

你想通過數字的列表? – 2014-12-09 19:02:58

+0

這是正確的! – slash 2014-12-09 19:05:21

+0

然後你的url應該看起來像這樣 - 'numbers = X&numbers = Y&numbers = Z。 – 2014-12-09 19:08:16

回答

0

這可能不是每個人的最佳方法,但我能夠使用JavaScript獲得此工作。我徹底測試了功能,目前它正在服務於我的目的。
我沒有控制權修改該網址,因爲它是第三方網址。

所以當用戶點擊我網站上的超鏈接時,會調用一個java腳本。 URL被解碼並在新窗口中打開。

<a href="#" onclick="decodeURL('<s:property value="#testUrl"/>')"> 
    <s:property value="#Num" /> 
</a> 

的Javascript

function decodeURL(url) { 
var url_dec = decodeURIComponent(url); 
window.open(url_dec); 
} 
2

我明白該逗號(,)是一個保留字和應進行編碼。 然而,在我的網址,我需要的是逗號

那麼你也沒......這是一個the XY problem完美例如

的XY問題是問你嘗試的解決方案而不是你的實際問題。

也就是說,你正在試圖解決的問題X,你想解y會的工作,但不是詢問有關X,當你遇到麻煩,你問Y.

蹊蹺一直固定在項目的規格中,現在它需要更多的錯誤來解決第一個問題。

您不應在網址中使用未轉義的逗號;遍歷規範鏈,找到它們可以分支到更新,更安全的方向。

如果要求是,例如,具有讀取的URL(通常稱爲漂亮的URL的RESTful網址),則可以使用Advanced Wildcard Mappings;假設你總是有三個數字,比如笛卡爾座標;你可以這樣做:

<action name="/coordinates/{x}/{y}/{z}" class="foo.bar.CartesianAction"> 

調用與網址:

http://www.test.com/coordinates/1/2/3 

,方式比你原來的URL更具可讀性。但是,對於您可能需要的各種需求,都有解決方案(不包括網址中的逗號),這僅僅是一個示例。

旁註:

從您發佈(可能與你的實際使用情況完全無關)的URL,看來你已經安裝的根上下文Web應用程序,而你是通過組成的行動只是變量(沒有操作名稱);如果是這種情況,您可能需要to read this answer

language=english部分也可能是完全僞造的,但在遠程情況下,您確實是在自己處理語言,請注意the framework would be happy to help you on that

+0

非常感謝您的建議!我寫的URL是第三方URL,僅用於說明目的。該URL有一個映射到它的操作名稱。進一步分析 - 我試圖找到在任何網址逗號的目的.. – slash 2014-12-03 22:40:34

+0

很高興,幫助。隨時更新您的問題,以獲得更有針對性的答案,並考慮提高這一點,如果它有幫助 – 2014-12-03 23:12:46