当前位置: 首页 > 编程语言 > C#

如果值包含&符号,如何在C#中更正解析查询字符串?

时间:2023-04-10 20:06:11 C#

如果值包含&符号,如何在C#中更正解析查询字符串?我需要解析查询字符串:?artist=singer1&singer2&song=namesong如果值包含像“singer1&singer2”这样的符号,静态方法HttpUtility.ParseQueryString不能按我想要的方式工作。例如:stringqs="?artist=singer1&singer2&song=namesong";NameValueCollectionquery=HttpUtility.ParseQueryString(qs);结果是:artist=singer1null=singer2song=namesong我想要结果artist=singer1&singer2song=namesong有什么想法吗?其中一个值中间的符号(&)会丢弃解析器,因为它是保留符号。将其替换为数字代码:stringqs="?artist=singer1+%26+singer2&song=namesong";NameValueCollectionquery=HttpUtility.ParseQueryString(qs);您的问题是&在查询字符串中具有特殊含义,它是定界参数。你感知到的artist参数中间其实是解析为参数分隔符。构造URL时需要对&进行URL编码。例如,正确的查询字符串应该是:?artist=singer1+%26+singer2&song=name+song(空格通常可以编码为+或%20,但这是另一个讨论的主题。)在构建查询字符串组件时,您可以使用HttpUtility.UrlEncode()来确保正确转义结果。例如,您可以像这样构建查询字符串:staticvoidMain(){varvalues=newNameValueCollection();值["艺术家"]="singer1&singer2";值[“歌曲”]=“歌曲名称”;Console.WriteLine(CreateQueryString(值));}staticstringCreateQueryString(NameValueCollectionvalues){if(values==null){thrownewArgumentNullException("values");}returnstring.Join("&",values.AllKeys.Select(key=>HttpUtility.UrlEncode(key)+"="+HttpUtility.UrlEncode(values[key])).ToArray());换句话说,问题是在构建查询字符串时,而不是在您尝试解析它时。当你解析它时,你已经有了一个语义上不正确的查询字符串;此时你无能为力。如果您想要artist=singer1&singer2,则需要对查询字符串中的&进行转义或编码。例如,如果我向Google询问fred&blotts,结果查询字符串包含&q=fred+%26+blotts而不是&q=fred+&+blotts请参见http://tools.ietf.org/html/rfc3986#page-12以上为C#学习教程:C#解析查询字符串中包含&符号时如何更正?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: