Закодированный символ используется вместо правильного - PullRequest
1 голос
/ 15 января 2009

У меня небольшая проблема, и я надеюсь, что вы можете помочь мне решить эту досадную проблему.

Мне нужно использовать 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, делает это в полном окне, работает нормально.

И в этой панели администрирования у меня есть текстовое поле, в котором пользователь добавляет имя пользователя и пароль, чтобы при входе на страницу администрирования я сразу переходил к сервису в iFrame, поэтому пользователю не нужно было вводить пользователя / pwd для входите в систему каждый раз, поэтому я пытаюсь динамически добавлять эти значения.

Есть идеи?

Добавлено: Если я добавлю правильный URL-адрес (с пользователем и pwd) в атрибут src iFrame на стороне HTML (не динамически), все будет работать нормально: (

Ответы [ 5 ]

5 голосов
/ 15 января 2009

Присутствие & amp; на самом деле там правильно. Большинство браузеров достаточно просты, чтобы не задыхаться, просто видя и там, но это технически не правильно.

2 голосов
/ 15 января 2009

«&» - это специальный символ в HTML (точнее, в SGML), поэтому его правильное кодирование. Да, даже в ссылочных URL.

1 голос
/ 15 января 2009

Спецификация HTML 4.01 сообщает:

Авторы должны использовать "& amp;" (ASCII десятичное 38) вместо «&», чтобы избежать путаницы с началом ссылки на символ (открытый разделитель ссылки на сущность). Авторам также следует использовать "& amp;" в значениях атрибутов, поскольку ссылки на символы допускаются в пределах CDATA значений атрибутов.

Таким образом, кодирование & как &amp; является правильным поведением, поскольку интерпретация значения атрибута src ( тип данных CDATA ) описывается как:

CDATA представляет собой последовательность символов из набора символов документа и может включать в себя объекты символов. Пользовательские агенты должны интерпретировать значения атрибутов следующим образом:

  • Заменить символьные объекты на символы,
  • Игнорировать перевод строки,
  • Замените каждый возврат каретки или язычок одним пробелом.

В противном случае значения атрибута src, такие как /foo?bar&sect=123, будут неоднозначными, поскольку их можно интерпретировать либо буквально как /foo?bar&sect=123, либо (заменяя sect сущность ) как /foo?bar§=123.

0 голосов
/ 15 января 2009

Вы должны использовать

     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 голосов
/ 15 января 2009

Это похоже на случай, когда вы можете воспользоваться кодировкой URL, чтобы скрыть &, минуя кодировку XML. & является U + 0025, поэтому вы можете закодировать его как% 25: https://www.parurval.se/urval/?username={0}%25password={1}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...