C# 使用&;时Querystring返回空值;amp;而不是&;从URL

C# 使用&;时Querystring返回空值;amp;而不是&;从URL,c#,html,asp.net,C#,Html,Asp.net,我使用以下函数从URL获取查询字符串的值 contact.aspx?PID=15&Lang=en-US--有效 if (!string.IsNullOrEmpty(Helper.GetQueryStringValue("Lang"))) { //Do somthing } public static String GetQueryStringValue(String qValue) { String value = String.Empty; if (HttpContext.

我使用以下函数从URL获取查询字符串的值

contact.aspx?PID=15&Lang=en-US
--有效

if (!string.IsNullOrEmpty(Helper.GetQueryStringValue("Lang")))
{
  //Do somthing
}


public static String GetQueryStringValue(String qValue)
{
  String value = String.Empty;
    if (HttpContext.Current.Request.QueryString[qValue] != null)
    {
      value = HttpContext.Current.Request.QueryString[qValue].ToString();
    }
 return value;
}
contact.aspx?PID=15&;Lang=en US
--失败

if (!string.IsNullOrEmpty(Helper.GetQueryStringValue("Lang")))
{
  //Do somthing
}


public static String GetQueryStringValue(String qValue)
{
  String value = String.Empty;
    if (HttpContext.Current.Request.QueryString[qValue] != null)
    {
      value = HttpContext.Current.Request.QueryString[qValue].ToString();
    }
 return value;
}
当我使用
时&在url中,它为querystring
Lang
返回空值,当我使用
&
时,它可以工作


我无法理解为什么会发生这种情况

在尝试访问查询字符串变量之前,您需要解码url

Server.UrlDecode(HttpContext.Current.Request.QueryString[qValue])

签出MSDN这是因为
&
实际上被解释为字符“&”,而不是连接符。。提供的查询字符串无效

您可以尝试使用
Server.UrlDecode(queryString)
对其进行解码/解析。您可以尝试替换所有
&发送到“%26”,然后将其馈送到
服务器。UrlDecode
-但不能保证这会解决问题。 有关
Server.UrlDecode
的更多信息,请参阅MSDN页-


底线是查询字符串目前的格式不正确。如果您可以控制呈现url的代码,请始终使用
&
而不是
&。(示例:)

它与编码或解码无关

符号是查询字符串参数的分隔符,因此URL中实际上有两个名称:
PID
amp;Lang
如果您更改代码以查找后者,您将得到
en us
作为您的输出

Response.Write(GetQueryStringValue("amp;Lang"));
解码URL不会起作用,因为它一开始就没有正确编码。正确编码的URL应为:

contact.aspx?PID%3d15%26amp%3bLang%3den-US 
如果你有,你可以解码它,但它仍然无法得到你想要的,因为你仍然没有一个名为
Lang
;即使在解码之后,它仍然是
amp;朗

另外,这是完全不相关的,但是
ToString()
GetQueryStringValue
函数中是多余的。这条线可以是:

value = HttpContext.Current.Request.QueryString[qValue];

它仍然返回null`if(HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.QueryString[qValue])!=null)`您可以控制QueryString吗?这可能是因为即使Server.UrlDecode也无法对其进行解码,因为在查询字符串中放置“&;”实际上是有效的,而不必将其指定为“&”-连接符。。我猜查询字符串的格式不正确,您将无法修复它。。URL从哪里来,你从哪里得到它,你能控制它吗?大声思考&这里没有编辑器。。尝试将所有“&;”值替换为“%26”(通过使用),然后将其传递到Server.UrlDecode。。看到了吗?我生成了url,这是(inti=0;I{sbMenuFooter.Append(“”;}
只需更改
&中的
&
“&;Language=“
”&Language=“
”&Language=“
”-否则您将生成格式错误的查询字符串,并且对查询字符串的任何解析(即使在.Net之外)都无法读取它。它应该可以解决您的问题。如果我有一些带有
的url怎么办和一些带有
&
。。。我的实际问题是,这些链接用于页脚菜单时使用文字控件,而用于顶部菜单时使用
aspmenu
control。页脚菜单的文本控件在
http://validator.w3.org/
&我不确定为什么同一个链接对一个控件有效,而对另一个控件无效,用于HTML validationERROR MSG
。这通常是由未定义的实体引用或使用未编码的符号(&)引起的级联错误在URL或正文文本中。有关更多详细信息,请参阅上一条消息Language
,上面的代码示例正在查找
Lang
。只要确保它们是一样的。也不相关,但如果您使用的是stringBuilder,请查看.AppendFormat(),因为这将为您节省大量生成该字符串的开销。