2010-01-28 47 views
2

我這樣做:在html標記逃生網址

<a href="http%3A%2F%2Flocalhost%3A8080%2Fnews.xhtml%3Fid%3D32%26lang%3Den" target="_blank" />

當這個被渲染,該鏈接指向:http://localhost:8080/news.xhtml?id=32&lang=en

我需要這個鏈接指向的URL編碼而不是解碼的那個。

有誰知道如何逃脫它?

更新(根據評論):我需要它來實現在Facebook上分享這個功能。要做到這一點的方法是撥打以下鏈接:http://facebook.com/sharer.php?u=<encoded url to share>

+0

未來請在問題中添加更多*上下文*以便整個功能要求是明確的,而不是問一半的問題;) – BalusC 2010-01-28 22:56:56

回答

4

爲什麼你需要這個?鏈接將在技術上被打破。

無論如何,你基本上只需要通過他們的URL編碼表示%25替換百分比%(換句話說:只要編碼URL 兩次)。

因此,結果你的具體情況是:

http%253A%252F%252Flocalhost%253A8080%252Fnews.xhtml%253Fid%253D32%2526lang%253Den

更新:因爲你問這在JSF背景下,這裏就是你通常會創建JSF鏈接的方式(這是因此,在默認情況下已經URL編碼):

<h:outputLink value="#{bean.url}" /> 

如果你想編碼兩次,你就必須抓住JSTL的c:url

<c:url value="#{bean.url}" var="url" /> 
<h:outputLink value="#{url}" /> 

更新2:按照註釋,實際需求是現在完全清楚,正常的JSF方式便被(注意,不一定需要對它進行編碼兩次在這裏!):

<h:outputLink value="http://facesbook.com/sharer.php"> 
    <f:param name="u" value="#{bean.url}" /> 
</h:outputLink> 
+0

嗯......我需要它來實現在Facebook上分享這個功能。 執行此操作的方法是調用以下鏈接: http://www.facebook.com/sharer.php?u=<編碼的url共享> – 2010-01-28 22:49:00

+0

使用'f:param'來做到這一點。看到我的更新2. – BalusC 2010-01-28 22:50:59

1

我不知道你爲什麼這樣做,但你基本上是雙重逃避真正的網址:

var s0 = "http://localhost:8080/news.xhtml?id=32&lang=en"; 
var s1 = escape(s0); 
var s2 = escape(s1); 
var s3 = unescape(s2); 
var s4 = unescape(s3); 
// Assume function created for echo 
echo("Original: " + s0); 
echo("Escape1: " + s1); 
echo("Escape2: " + s2); 
echo("Unescape1: " + s3); 
echo("Unescape2: " + s4); 

這將導致以下的輸出:

Original: http://localhost:8080/news.xhtml?id=32&lang=en 
Escape1: http%3A//localhost%3A8080/news.xhtml%3Fid%3D32%26lang%3Den 
Escape2: http%253A//localhost%253A8080/news.xhtml%253Fid%253D32%2526lang%253Den 
Unescape1: http%3A//localhost%3A8080/news.xhtml%3Fid%3D32%26lang%3Den 
Unescape2: http://localhost:8080/news.xhtml?id=32&lang=en 

注:通常你只想逃避URL的個別參數而不是整個URL本身。

+0

我感到很傻。預先構建到現代ECMA/javascript中?我認爲js只能在十六進制和十進制之間切換。 – Anthony 2010-01-28 23:02:36

+0

是的,escape是全局對象上的一個函數,並且與encodeURI/decodeURI和encodeURIComponent/decodeURIComponent一起已經在js很長時間。 – Ryan 2010-01-28 23:27:14

0

我不清楚在背景上,但我想知道你是否有意編碼整個URL?

我的理解是,你只需要編碼任何不爲網址的標準,如空間,前瞻性的斜線不表明目錄等

但是假如你也許不得不傳給URL你作爲一個變量,也許,你可以使用像JavaScript(或jQuery)的東西來解碼鏈接點的位置,而不會遇到手動雙重編碼的麻煩等。對於jquery,有一個非常簡單和輕量的添加,稱爲URL Encode可以編碼和解碼。授予源代碼仍然會反映編碼,但鏈接(單擊或懸停時)都會反映非編碼的URL