在html标记逃生网址

在html标记逃生网址

问题描述:

我这样做:在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

为什么你需要这个?链接将在技术上被打破。

无论如何,你基本上只需要通过他们的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= – 2010-01-28 22:49:00

+0

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

有许多资源与为你做这个工具:

HtmlEscape.net例如逃脱你的文字http://localhost:8080/news.xhtml?id=32&lang=en

这和浏览器需要的一样多,你需要什么?

我不知道你为什么这样做,但你基本上是双重逃避真正的网址:

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

我不清楚在背景上,但我想知道你是否有意编码整个URL?

我的理解是,你只需要编码任何不为网址的标准,如空间,前瞻性的斜线不表明目录等

但是假如你也许不得不传给URL你作为一个变量,也许,你可以使用像JavaScript(或jQuery)的东西来解码链接点的位置,而不会遇到手动双重编码的麻烦等。对于jquery,有一个非常简单和轻量的添加,称为URL Encode可以编码和解码。授予源代码仍然会反映编码,但链接(单击或悬停时)都会反映非编码的URL