在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>
为什么你需要这个?链接将在技术上被打破。
无论如何,你基本上只需要通过他们的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>
嗯......我需要它来实现在Facebook上分享这个功能。 执行此操作的方法是调用以下链接: http://www.facebook.com/sharer.php?u= – 2010-01-28 22:49:00
使用'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本身。
我不清楚在背景上,但我想知道你是否有意编码整个URL?
我的理解是,你只需要编码任何不为网址的标准,如空间,前瞻性的斜线不表明目录等
但是假如你也许不得不传给URL你作为一个变量,也许,你可以使用像JavaScript(或jQuery)的东西来解码链接点的位置,而不会遇到手动双重编码的麻烦等。对于jquery,有一个非常简单和轻量的添加,称为URL Encode可以编码和解码。授予源代码仍然会反映编码,但链接(单击或悬停时)都会反映非编码的URL
未来请在问题中添加更多*上下文*以便整个功能要求是明确的,而不是问一半的问题;) – BalusC 2010-01-28 22:56:56