【问题标题】:Special Characters in URL query stringURL 查询字符串中的特殊字符
【发布时间】:2011-10-08 16:12:21
【问题描述】:

我有一种情况,用户可以在 URL 查询字符串中输入他们想要的任何字符。

例子:

http://localhost/default.aspx?ID=XXXX

http://localhost/default.aspx?ID=&XXXX

http://localhost/default.aspx?ID=#XXXX

无论字符是什么,网页都必须接受 ID 参数。然而,某些特殊字符,如 & 和磅 (#) 会产生问题。我怎样才能接受它们?

【问题讨论】:

    标签: javascript asp.net html url query-string


    【解决方案1】:

    编码你的网址HttpServerUtility.UrlEncode Method (String)

    编辑:根据您的评论,您想要获取ID的查询字符串值

     String id = Request.QueryString["ID"];
    

    【讨论】:

    • 在我的例子中,用户在地址栏中输入 URL。我需要做的只是获取用户输入的 ID。我怎样才能做到这一点,而无需对 URL 进行任何控制,而只能控制查询字符串?
    • 但在这种情况下 ID 将是一个空字符串,在这种情况下 ID=&XXXX 而我真正想要的是 ID 等于 "&XXXX"
    【解决方案2】:

    这个:

    encodeURIComponent(uri)
    

    其中uri?ID=之后的组件

    【讨论】:

      【解决方案3】:

      使用

      userinput = escape(userinput)
      

      那么,在 PHP 中:

      $userinput = urldecode($_GET['id'])
      

      或在 JS 中:

      userinput = unescape(userinput)
      

      【讨论】:

        【解决方案4】:

        如果用户正在输入查询字符串,他们必须首先正确编码查询字符串。如果您自己创建查询字符串,例如从表单提交,您将需要使用 URL 编码方法。

        【讨论】:

        • 是否没有可以在网页端添加的控件,我可以将特殊字符(例如&符号(&))解释为任何普通字符?
        • 我认为您唯一的选择是遍历所有参数,假设 ID 是您期望的唯一参数。所以如果用户输入?ID=123&456。然后看看它给你什么,servlet API 可能只给你一个参数 ID,值为 123。但它可能给你第二个参数 456,在这种情况下你可以将它们附加在一起。这确实是一个糟糕的解决方案,因为当您迭代时它可能会出现问题。最好的办法是更改您的要求,因为该技术无法按照他们希望的方式支持它。
        猜你喜欢
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 2022-01-19
        • 2011-05-29
        • 1970-01-01
        相关资源
        最近更新 更多