2009-01-15 51 views
1

我有一个小问题,我在跳,你可以帮我解决这个烦人的问题。使用的是编码字符,而不是正确的

我需要使用一个iFrame在管理面板,让用户使用选择的服务,并在HTML我有:

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

在我的代码隐藏文件,我有:

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

输出是这样的:

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

通过用户名和密码

我怎样才能避免这种情况,当&amp;代替&标志在src地址?

我试着用HttpUtility.Decode(myCompleteUrl),但具有相同的成就:(

最糟糕的是,如果src代码只有地址

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

我不是能够输入用户/ pwd,我看到表单,我可以输入文本,但它什么都没做,只刷新iframe内页,在完整窗口中执行此操作,可以正常工作。

并且在该管理面板我有extbox给用户添加用户名和密码,以便进入管理页面,我将直接跳转到iFrame中的服务,这样用户无需每次都输入user/pwd登录,这就是我正在尝试的方式动态添加这些值。

任何想法?

补充: 如果我把正确的URL地址(与用户和PWD)在HTML侧的IFRAME SRC属性(非动态)一切工作正常:(

回答

5

& amp;在那里其实是正确的。大多数浏览器都足够宽容,不会因为在那里看到&而窒息,但它在技术上不正确。

-1

这似乎是一个情况可以利用URL编码的隐藏&,绕过XML编码&是U + 0025,所以可以进行编码,为%25:https://www.parurval.se/urval/?username= {0}%25password = {1}

+0

我第一次读是荒谬的,但是,在我写东西之前我必须尝试,你自己试过了吗? – balexandre 2009-01-15 09:20:20

+0

那么,在我的情况下,我不必逃避&。事实上,我一直都在使用这个。 MSDN网址包含(VS8.5)。 Markdown语法是[text](url),所以它在VS(8.5)之后截断了URL。 %28VS8.5%29确实有效。 – MSalters 2009-01-19 16:10:09

+0

URL编码是错误的事情在这里,你正在使'用户名'值等于“用户名和密码”。 – bobince 2009-02-10 12:57:28

-3

应使用

 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

编码???我猜你不明白我的问题会枯萎或编码功能 – balexandre 2009-01-15 09:13:44

2

“&”是HTML中的一个特殊字符(更具体地说在SGML中),所以编码它是正确的事情。是的,即使在链接网址中。

1

HTML 4.01 specification状态:

作者应使用 “&放大器;” (ASCII十进制38)而不是“&”,以避免与字符引用(实体引用开放定界符)的开始混淆。作者还应该使用“& amp”在属性值中,因为在CDATA属性值内允许字符引用。

所以编码由于src属性值的解释(CDATA data type)的&作为&amp;是正确的行为被描述为:

CDATA是一个字符从文档的字符集的序列,并且可能包括角色实体。用户代理应该如下解释的属性值:

  • 与字符替换字符实体,
  • 忽略换行符,
  • 替换为单个空格每个回车或标签。

否则像/foo?bar&sect=123src属性值将是不明确的,因为它们既可以解释字面上/foo?bar&sect=123或作为/foo?bar§=123(替换sect entity)。

相关问题