我正在开发一个与支付提供商(epdq)集成的项目。他们将成功付款的变量以查询字符串传递回我们的网站。传回的部分查询字符串包括客户名称。我们注意到,如果有人输入特殊字符,例如'£',则会返回查询字符串参数,如下所示:CN = Mr +%A3Test + Test
这很奇怪,因为我认为£符号的UrlEncoded值是%C2%A3。
无论如何,这都会导致问题,因为我们必须解码在查询字符串中传回的值并获取它们的真值,在本例中为£符号。
我尝试过两种不同的方法:
foreach (var key in querystring.Keys)
{
var enc = System.Text.Encoding.GetEncoding("iso-8859-1");
Logger.Debug(HttpUtility.ParseQueryString(querystring.ToString(), enc)[key.ToString()]);
Logger.Debug(HttpUtility.UrlDecode(querystring.Get(key.ToString()), enc));
}
我已经尝试过iso-8859-1和utf-8。然而,两者都将字符串转换为'Mr TestTest',显然是一个无法正确转换回来的字符。
除了使用正则表达式并在字符串中搜索客户可以输入的大量可能字符,然后将它们从ASCII等效字符转换(我在ASCII%A3中注意是£符号)我不是确定在哪里可以使用它。
任何人都可以提供任何指示吗?
感谢您提前的时间
dotdev
答案 0 :(得分:0)
尝试此编码:Encoding.GetEncoding(" 1252");
答案 1 :(得分:-1)
我知道我迟到了,但您可以尝试以下代码:
HttpUtility.UrlDecode(key.Replace("%A3", "£"));