2010-01-28 5 views
2

Je fais ceci:échapper url sur une balise html

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

et quand cela est rendu, le lien pointe vers: http://localhost:8080/news.xhtml?id=32&lang=en

J'ai besoin que ce lien pointe vers l'URL encodée et pas à celui qui a été décodé.

Est-ce que quelqu'un sait comment y échapper?

Mise à jour (selon les commentaires): J'en ai besoin pour implémenter Partager cette fonctionnalité sur facebook. La façon de le faire est d'appeler le lien suivant: http://facebook.com/sharer.php?u=<encoded url to share>

+0

Dans l'avenir s'il vous plaît ajouter plus de * contexte * à la question de sorte que toute l'exigence fonctionnelle est clair, au lieu de poser des demi-questions;) – BalusC

Répondre

4

Pourquoi avez-vous besoin de cela? Le lien serait alors techniquement brisé.

Peu importe, vous fondamentalement juste besoin de remplacer les % par leur Percents URL représentation codée %25 (en d'autres termes: il suffit de coder l'URL deux fois).

Ainsi, le résultat dans votre cas particulier serait:

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

Mise à jour: que vous vous demandez ce dans un contexte de JSF, voici la manière dont vous le feriez normalement créer des liens dans JSF (qui sont ainsi par défaut déjà codé URL):

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

Si vous voulez encoder deux fois, vous devrez saisir JSTL de c:url:

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

Mise à jour 2: selon le commentaire, l'exigence réelle est maintenant tout à fait clair, la voie normale JSF aurait alors été (notez que vous ne devez pas nécessairement encoder deux fois ici!):

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

Eh bien ... J'en ai besoin pour mettre en œuvre Partagez cela sur la fonctionnalité facebook. La manière de le faire est d'appeler le lien suivant: http://www.facebook.com/sharer.php?u=< urlencoded à partager> –

+0

Utilisez 'f: param' pour cela. Voir ma mise à jour 2. – BalusC

1

Je ne sais pas pourquoi vous faites cela, mais vous êtes essentiellement l'URL s'éloignaient doublement réel:

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); 

Il en résulte la sortie suivante:

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 

NOTE: Habituellement, vous ne veulent échapper que les paramètres individuels de l'URL et non l'intégralité de l'URL elle-même.

+0

Je me sens idiot. L'échappement est-il pré-intégré dans un ECMA/javascript moderne? Je pensais que js ne pouvait que basculer entre hex et décimal. – Anthony

+0

Oui, escape est une fonction sur l'objet global et a été dans js pendant longtemps avec encodeURI/decodeURI et encodeURIComponent/decodeURIComponent. – Ryan

0

Je ne suis pas clair non plus sur l'arrière-plan, mais je me demande si vous encodez l'URL entière intentionnellement?

Ma compréhension est que vous avez seulement besoin de coder quoi que ce soit qui ne soit pas la norme pour les URL, comme des espaces, avant-barres obliques qui n'indiquent pas un répertoire, etc.

Mais vous aviez peut-être l'supposant URL passé à En tant que variable get, vous pouvez peut-être utiliser javascript (ou jquery) pour décoder le point de lien sans avoir à faire de double encodage manuel, etc. Il y a un ajout très simple et léger pour jquery appelé URL Encode cela peut encoder et décoder. Certes, le code source refléterait toujours le codage, mais le lien (à la fois lorsque cliqué ou survolé) refléterait l'URL non codée

Questions connexes