2009-01-15 7 views
1

J'ai un petit problème et je saute que vous pouvez m'aider à résoudre ce problème ennuyeux.Caractère codé est utilisé à la place le bon

je dois utiliser un iFrame dans un panneau d'administration pour permettre aux utilisateurs d'utiliser le service de sélection et dans le code HTML je:

<iframe scrolling="yes" runat="server" title="Par Selection" id="iFrame" 
    frameborder="0" enableviewstate="true" width="100%" height="490" /> 

dans mon fichier code-behind je:

iFrame.Attributes.Add("src", String.Format(
      "https://www.parurval.se/urval/?username={0}&password={1}", 
      parSettings.GetSettings(parSettings.SettingsType.PARSelection, parSettings.SectionType.Username), 
      parSettings.GetSettings(parSettings.SettingsType.PARSelection, parSettings.SectionType.Password))); 

La sortie est la suivante:

<iframe id="tcMain_tabPARSelection_iFrame" scrolling="yes" title="Par Selection" 
    frameborder="0" width="100%" height="490" 
    src="https://www.parurval.se/urval/?username=myUsername&amp;password=myPassword"> 
</iframe> 

S'il vous plaît Note le &amp; à la place & signe l'adresse src en passant le nom d'utilisateur et mot de passe

Comment puis-je empêcher cela?

J'ai essayé avec HttpUtility.Decode (myCompleteUrl) mais avec la même réalisation :(

La pire chose est, si le code src n'a que l'adresse

... src="https://www.parurval.se/urval/" ... 

Je ne suis pas capable d'entrer l'utilisateur/pwd, je vois le formulaire et je peux entrer du texte, mais il ne fait rien, il rafraîchit seulement la page intérieure iframe, en faisant cela dans une fenêtre complète, fonctionne bien

Et dans ce panneau d'administration J'ai à extbox à l'utilisateur ajouter le nom d'utilisateur et mot de passe afin que entrant dans la page d'administration, je vais directement au service dans l'iFrame afin que l'utilisateur n'a pas besoin d'entrer utilisateur/PWD pour se connecter à chaque fois, c'est ajouter ces valeurs dynamiquement.

Des idées?

Ajouté: Si je mets l'adresse URL correcte (avec l'utilisateur et PWD) dans l'attribut iframe src dans la partie HTML (non dynamique) tout fonctionne très bien :(

Répondre

5

La présence de l'ampli &; est réellement correct là. La plupart des navigateurs pardonnent assez pour ne pas s'étouffer juste en voyant & là, mais techniquement c'est incorrect.

+0

peut être vrai, mais ne résout pas mon problème :( – balexandre

+0

Ce que j'essaie de dire, c'est qu'il n'y a pas de problème. l'URL correcte (avec le & remplacé par &) lorsque le navigateur envoie la demande pour la page pour le iframe – Yuliy

+0

+1 Yully est correct Si vous avez un problème en suivant le lien, il ne se passe pas pour la raison que vous pensez. le navigateur en existence verra l'attribut contenant '&' et mettra correctement '&' dans le lien – bobince

-1

Cela semble être un cas où vous pouvez profiter de l'encodage d'URL pour cacher la &, sans passer par l'encodage XML & est U + 0025, de sorte que vous pouvez l'encoder en% 25:. https://www.parurval.se/urval/?username= {0}% 25password = {1}

+0

était absurde la première fois que j'ai lu, mais, j'ai dû essayer avant d'écrire quelque chose, avez-vous essayé cela vous-même? – balexandre

+0

Eh bien, dans mon cas, je n'ai pas eu à s'échapper &. En fait, je l'utilise tout le temps à SO. Les URL MSDN contiennent (VS8.5). La syntaxe Markdown est [text] (url) donc elle tronque l'URL après VS (8.5). % 28VS8.5% 29 fonctionne. – MSalters

+0

L'encodage d'URL est la mauvaise chose ici, vous faites en sorte que la valeur 'nom d'utilisateur' soit égale à "nom d'utilisateur et mot de passe". – bobince

-3

vous devez utiliser

 HttpUtility.HtmlEncode(String.Format("https://www.parurval.se/urval/?username={0}&password={1}",    
parSettings.GetSettings(parSettings.SettingsType.PARSelection, parSettings.SectionType.Username),    
parSettings.GetSettings(parSettings.SettingsType.PARSelection, parSettings.SectionType.Password))); 
+0

Encode ??? Je suppose que vous ne comprenez pas mon problème ou la fonction Encode – balexandre

2

"&" est un caractère spécial en HTML (plus spécifiquement en SGML), donc l'encoder est la bonne chose à faire. Oui, même dans les URL de liens.

+0

Je sais que :) mais je dois montrer & dans le HTML afin de séparer les paramètres Query String, des idées sur la façon d'accomplir cela? – balexandre

+0

Vous ne comprenez pas. Une URL comme ".../urval /? Nom_utilisateur = a & password = b" est _correct_. Il n'y a pas besoin d'écrire du HTML invalide, les navigateurs peuvent très bien gérer le HTML correct. :) – Bombe

+0

Je fais ... mais ce n'est pas dans un navigateur, il est dans un iFrame, et ce comportement ne se réplique pas si vous utilisez un iFrame :) le point de terminaison ne sait pas ce qui est & est. S'il vous plaît essayez pour votre auto. – balexandre

1

Les HTML 4.01 specification états:

Les auteurs doivent utiliser "& amp;" (ASCII décimal 38) au lieu de "&" pour éviter toute confusion avec le début d'une référence de caractère (délimiteur ouvert de référence d'entité). Les auteurs doivent également utiliser "& amp;" dans les valeurs d'attribut, car les références de caractères sont autorisées à l'intérieur de CDATA valeurs d'attribut.

codant Ainsi, le & comme &amp; est un comportement correct puisque l'interprétation de la valeur de l'attribut src (CDATA data type) est décrite comme suit:

CDATA est une séquence de caractères du caractère de jeu de documents et peut inclure des entités de caractères. Les agents utilisateurs devraient interpréter les valeurs d'attributs comme suit:

  • Remplacer les entités de caractère avec des personnages,
  • Ignorer les sauts de ligne,
  • Remplacer chaque retour chariot ou onglet avec un seul espace.

Sinon src valeurs d'attribut comme /foo?bar&sect=123 serait ambigu, car ils peuvent être interprétées soit littéralement comme /foo?bar&sect=123 ou (remplaçant le sect entity) comme /foo?bar§=123.

Questions connexes