caráter codificado é usado em vez do correto

votos
1

Eu tenho um pequeno problema e eu estou pulando que você pode me ajudar a resolver este problema chato.

Eu preciso usar um iFrame em um painel de administração para permitir aos usuários utilizar o serviço de seleção, e no HTML eu tenho:

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

no meu arquivo code-behind eu tenho:

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

A saída é a seguinte:

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

Por favor , note o &amp;lugar &entre o endereço src ao passar nome de usuário e senha

Como posso evitar isso?

Eu tentei com HttpUtility.Decode (myCompleteUrl), mas com a mesma conquista :(

A pior coisa é , se o código src tem apenas o endereço

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

Eu não sou capaz de introduzir o usuário / senha, vejo a forma e posso inserir texto, mas ele não faz nada, ele só atualiza a página interna iframe, fazendo isso em uma janela completa, funciona bem.

E nesse painel de administração Eu tenho uma caixa de texto para o usuário adicionar o nome de usuário e senha, a fim de que entrar na página de administração, vou saltar directamente para o serviço no iFrame para que o usuário não precisa digitar usuário / senha de login de cada vez , que é a maneira que eu estou tentando adicionar esses valores dinamicamente.

Alguma ideia?

Adicionado: Se eu colocar o endereço URL correta (com usuário e pwd) no atributo iframe src no lado do HTML (não dinamicamente) tudo funciona :( fina

Publicado 15/01/2009 em 09:53
fonte usuário
Em outras línguas...                            


5 respostas

votos
5

O presense do & amp; é realmente correto lá. A maioria dos navegadores estão perdoando o suficiente para não engasgar com apenas vendo e ali, mas não é tecnicamente correto.

Respondeu 15/01/2009 em 10:02
fonte usuário

votos
2

“&” É um caractere especial em HTML (mais especificamente em SGML), então codificação é a coisa correta a fazer. Sim, mesmo em URLs de link.

Respondeu 15/01/2009 em 10:02
fonte usuário

votos
1

Os especificação HTML 4.01 estados:

Os autores devem usar "& amp;" (Decimal ASCII 38) em vez de "&" para evitar confusão com o início de uma referência de caráter (entidade de referência delimitador aberto). Autores também deve usar "& amp;" em valores de atributos desde referências de caracteres são permitidos dentro CDATA valores de atributos.

Assim que codifica o &como &amp;é comportamento correcto, dado que a interpretação do srcvalor do atributo ( tipo de dados CDATA ) é descrito como:

CDATA é uma sequência de caracteres do conjunto de caracteres do documento e pode incluir entidades de caracteres. Os agentes deveriam interpretar os valores dos atributos da seguinte forma:

  • Substituir entidades de caracteres com caracteres,
  • Ignorar avanços de linha,
  • Substituir cada símbolo de retorno ou guia com um único espaço.

Caso contrário, srcos valores de atributos como /foo?bar&sect=123seria ambíguo, pois pode ser interpretado tanto literalmente como /foo?bar&sect=123ou (substituindo a sectentidade ) como /foo?bar§=123.

Respondeu 15/01/2009 em 13:14
fonte usuário

votos
-1

Este parece ser um caso onde você pode tirar vantagem da codificação de URL para esconder o &, ignorando codificação XML. & É U + 0025, para que possa codificá-lo como% 25: https://www.parurval.se/urval/?username= {0}% 25password = {1}

Respondeu 15/01/2009 em 10:00
fonte usuário

votos
-3

Você deveria usar

     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)));
Respondeu 15/01/2009 em 10:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more