【问题标题】:html escape charactershtml转义字符
【发布时间】:2012-07-05 14:52:42
【问题描述】:

我有以下:

<form name="input" method="get" action="http://site:8083/Default.aspx?DC=" target="foo" onSubmit="window.open('', 'foo', 'width=1100 height=500,status=no,resizable=yes,scrollbars=yes')">
<select name="DC">
<option value="1&Type=type1">1</option>
<option value="2&Type=type2">2</option>
<option value="3&Type=type3">3</option>
<option value="4&Type=type4">4</option>
<option value="5&Type=type5">5</option>
<option value="6&Type=type6">6</option>
<option value="7&Type=type7">7</option>
</select>
<input type="submit" value=">>"/>&nbsp;&nbsp;
</form>

基本上我的查询字符串应该类似于 DC=1&Type=type1 我遇到的问题是,当我单击 html 上方的 >> 按钮时,将 & 更改为 %26 并将 = 更改为 %3D

我怎样才能使价值保持在上面的代码中?

【问题讨论】:

  • 这是正确的行为。这些字符已经过 URL 编码,如果您将其粘贴为 URL,这将起作用

标签: c# asp.net html query-string


【解决方案1】:

是的,这是预期的行为,HTTP GET 以这种方式工作,值被编码为与键不同。在 GET 中,浏览器附加以“&”分隔并以“?”开头的 key=value 对;您不应该在 url 中自己指定它们。

我认为你应该这样改变你的代码,也许这就是你想要得到的:

<form name="input" method="get" action="http://site:8083/Default.aspx" target="foo" onSubmit="updateType()">
<select name="DC">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <!-- etc... -->
</select>
<input type="hidden" name="Type"/>
<input type="submit" value=">>"/>
</form>

在 Javascript 中...:

function updateType(){
    // set up 'Type'
    document.forms[0].Type.value = 'Type' + document.forms[0].DC.value;
    // open popup
    window.open('', 'foo', 'width=1100 height=500,status=no,resizable=yes,scrollbars=yes')
    return true;
}

【讨论】:

  • 是的,我只需要另一个选择,现在它已正确创建。谢谢
【解决方案2】:

表单旨在提交数据的键/值对,其中键是控件的name,值是value。它们不会将任意字符串混合在一起。

设计您的服务器端程序以期望以表单设计使用的格式输入。

【讨论】:

    【解决方案3】:

    ...这是正确的。请求参数 [get] 应该被编码。 当您收到请求时,您的服务器应该解码它们 [apache/php] 或者我不知道 ASP,但在 php 中它提供了一个名为 urldecode() 的函数 ...

    【讨论】:

    • 您不需要解码它们,因为他想使用 url 中的值并且它们在 url 中完全有效。问题是试图做一些表单不是为之设计的事情。
    • 我只需要添加另一个选择并修复它,就像&lt;select name="Type"&gt; &lt;option value="type1"&gt;type1&lt;/option&gt; &lt;option value="type2"&gt;type2&lt;/option&gt; &lt;/select&gt;
    【解决方案4】:

    尝试使用:

    HttpUtility.UrlDecode()

    Further reading

    【讨论】:

      【解决方案5】:

      因此,您要做的是在设置表单上的单个项目时将两个不同的查询字符串设置为两个不同的值。虽然您尝试的解决方案是一个好主意,但显然浏览器正在积极阻止您使用该方法(出于安全原因),这是正确的。我看到了两种适合您的解决方案。

      1. 使用表单仅发送一个查询字符串(即 DC),并在服务器端确定“类型”的值应该是什么。如果将两个值都作为查询字符串非常非常重要(例如,您正在重新使用仅查看这些查询字符串的控件),则在服务器端使用 Server.Transfer 添加其他查询字符串.

      2. 在表单上提供两种类型的输入。一个是您在那里的选择框,另一个是隐藏的选择框、隐藏的输入字段或其他任何适合您的东西。将 Javascript 添加到页面,以便在可见选择框上更改选择时将隐藏字段设置为正确的值,然后在提交表单时,两个输入都只提交一个查询字符串,因为浏览器旨在支持.

      这是选择 #2 的实现:

      <script type="text/javascript">
      var DCMapping = new Array();
      DCMapping["1"] = "type1";
      DCMapping["2"] = "type2";
      DCMapping["3"] = "type3";
      DCMapping["4"] = "type4";
      DCMapping["5"] = "type5";
      DCMapping["6"] = "type6";
      DCMapping["7"] = "type7";
      function selectionChanged(selectBox)
      {
          alert(DCMapping[selectBox.value]);
          document.getElementById('hidType').value = DCMapping[selectBox.value];
      }
      </script>
      <form name="input" method="get" action="http://site:8083/Default.aspx" target="foo" 
          onSubmit="window.open('', 'foo', 'width=1100 height=500,status=no,resizable=yes,scrollbars=yes')">
          <select name="DC" onchange="selectionChanged(this)">
              <option value="1">1</option>
              <option value="2">2</option>
              <option value="3">3</option>
              <option value="4">4</option>
              <option value="5">5</option>
              <option value="6">6</option>
              <option value="7">7</option>
          </select>
          <input type="hidden" name="Type" id="hidType" value="1" />
          <input type="submit" value=">>"/>&nbsp;&nbsp;
      </form>
      

      【讨论】:

        【解决方案6】:

        你应该使用:

        HttpUtility.UrlDecode();

        转换url中的转义字符

        【讨论】:

          【解决方案7】:

          您可以从&lt;form&gt; 中删除方法和操作。而是扩展 JavaScript/VBScript 以获取所选选项的值并将其与 url 根连接。

          您不需要弄乱 url 解码,%.. 应该可以正常工作。

          【讨论】:

            猜你喜欢
            • 2012-05-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多