2010-05-22 6 views
1

Je suis en train de tirer dans une valeur src à partir d'un document XML, et qui je teste avec, le src est:Retirer l'ancre d'URL en C#

<content src="content/Orwell - 1984 - 0451524934_split_2.html#calibre_chapter_2"/>

Cela crée un problème lors de la tentative d'ouverture du fichier. Je ne suis pas sûr de ce que ce suffixe # (substance) est appelé, donc je n'ai pas eu de chance de chercher une réponse. Je voudrais juste un moyen simple de l'enlever si possible. Je suppose que je pourrais écrire une fonction pour chercher un # et enlever n'importe quoi après, mais cela casserait si le nom de fichier contenait un symbole # (ou un fichier peut-il même avoir ce symbole?)

Merci!

+1

C'est ce qu'on appelle une ancre. –

+0

Mis à jour, merci! – kcoppock

Répondre

1

Si vous aviez le src dans une chaîne, vous pouvez utiliser

srcstring.Substring(0,srcstring.LastIndexOf("#")); 

qui renverrait le src sans #. Si les valeurs que vous récupérez sont toutes des URL Web alors cela devrait fonctionner, le # est un signet dans une URL qui vous amène à une partie spécifique de la page.

+0

C'était la méthode la plus simple pour moi, merci pour l'aide! – kcoppock

+0

Il s'appelle: srcstring.Substring (0, srcstring.LastIndexOf ("#")); – NucS

1

de Wikipédia:

# est utilisé dans une URL d'une page Web ou une autre ressource pour introduire un « identifiant de fragment » - un identifiant qui définit une position dans cette ressource. Par exemple, dans l'URL http://en.wikipedia.org/wiki/Number_sign#Other_uses la partie après le # (Other_uses) est l'identificateur de fragment, dans ce cas indiquant que l'affichage doit être déplacé pour montrer l'étiquette marquée par ... dans le HTML

2

Vous devriez être OK en supposant que les URL ne contiennent pas un « # »

Le caractère « # » est dangereux et doit être codé toujours parce qu'il est utilisé dans le World Wide Web et dans d'autres systèmes pour délimiter une URL à partir d'un fragment/identificateur d'ancre qui pourrait suivre .

Source (recherchez "#" ou "non sûr").

Par conséquent, il suffit d'utiliser String.Split() avec le "#" comme caractère de division. Cela devrait vous donner 2 parties. Dans le cas très improbable, il donne plus, il suffit de rejeter le dernier et de rejoindre le reste.

+0

Cela fonctionne, merci! – kcoppock

0

Il est dangereux de retirer l'ancrage de l'URL. Ce que je veux dire, c'est que les sites de type ajax utilisent l'ancre pour garder une trace du contexte. Par exemple gmail. Si vous allez à http://www.gmail.com/#inbox, vous allez directement à votre boîte de réception, mais si vous allez à http://www.gmail.com/#all, vous allez à tout votre courrier. Le serveur peut donner une réponse différente en fonction de l'ancre, même si la réponse est un fichier.

+0

N'avez-vous pas un peu contredit votre propre réponse ici ... oui, le client peut rendre un contenu différent en fonction de l'ancre, mais le serveur donnera normalement toujours la même réponse. La partie importante ici est Ajax, que vous avez mentionné vous-même. Et cela se passe côté client. –

+0

Aussi, dans mon cas, peu importe, ce sont tous des fichiers XML locaux, ce ne sera pas une requête web réelle. Mais c'est bon à garder à l'esprit pour les projets futurs, cependant. – kcoppock

+0

@BurningIce, ce que je voulais dire, c'est que les ancres peuvent avoir des effets secondaires sur la réponse du serveur. Quand vous allez à http://www.gmail.com/# all, gmail ne vous renvoie pas tout votre courrier, puis le navigateur le filtre en fonction de votre ancre (l'ancre aurait pu être #inbox, #all, #buzz, etc). C'est le serveur qui répond de cette façon, en fonction de l'URL complète demandée. – Fede