我正在尝试解码从PHP脚本传递到我的C#应用程序的百分比编码字符串。 PHP会对数据进行加密,因此我会对许多特殊字符进行百分比编码。
这是我在网址中传递的字符串:
%C9%90%04L%EFEA%D1U%图AFi%CBC%3A%E5%D0%40Q%D6%1BN%C9%C3%B5%0FT%FC%E5H%95米%EF%BF%24TB% A6%D1%08%3B%83%A1%CF%1B%99Zo%02
但它解码部分的麻烦百分比:当我获取查询字符串时,如下所示:
var queryString = HttpContext.Current.Request.QueryString;
var token = queryString["token"];
变量token
等于:
%C9%90%04L%EF%BF%BDEA%EF%BF%BDU%EF%BF%BDI%EF%BF%BDC%3A%EF%BF%BD%EF%BF%BD%40Q% EF%BF%BD%1BN%EF%BF%BD%C3%B5%0FT%EF%BF%BD%EF%BF%BDH%EF%BF%BDM%EF%BF%BD%24TB%EF%BF% BD%EF%BF%BD%08%3B%EF%BF%BD%EF%BF%BD%EF%BF%BD%1B%EF%BF%BDZO%02
这绝对不是我放入查询字符串的内容。在查看它时,它第一次混乱是%EF
(在原始查询字符串中开始第11个字符)。它显示%EF
而不是%EF%BF%BD
。//Run timer
$(document).ready(function () {
if($('input[name=active_question]').val()!="")
{
start_timer();
}
});
function start_timer()
{
var x=0;
function doStuff() {
x++;
$('.timer').html(x+' sec');
console.log('Timer:'+x);
$.ajax({
method: "GET",
url: "/services/get_active_question/"
})
.done(function( data ) {
//It is time to regenerate the question values.
console.log('Data:'+data);
if(data['id']!=0)
{
regenerate_question(data);
}
});
}
setInterval(doStuff, 1000);
}
function regenerate_question(data)
{
if(data['id']!=0)
{
console.log('A: '+data['a']);
$('.progress-a').prop('value',data['a']);
$('.progress-b').prop('value',data['b']);
$('.progress-x').prop('value',data['x']);
$('.progress-y').prop('value',data['y']);
}
}
。当我搜索一下时,我发现this webpage表示" Hex UTF-8 Bytes"是EF BF BD。
编辑:
忘了提,QueryString看起来像这样:
标记=%C9%90%04L%EF%BF%BDEA%EF%BF%BDU%EF%BF%BDI%EF%BF%BDC%3A%EF%BF%BD%EF%BF%BD% 40Q%EF%BF%BD%10亿%EF%BF%BD%C3%B5%0fT%EF%BF%BD%EF%BF%BDH%EF%BF%BDM%EF%BF%BD%24TB%EF% BF%BD%EF%BF%BD%08%3B%EF%BF%BD%EF%BF%BD%EF%BF%BD%1B%EF%BF%bdZo%02安培; oauth_token_secret = S%23%2BW% EF%BF%BD%EF%BF%BDX%17%EF%BF%BD0%EF%BF%BD%60%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF% BD *%EF%BF%BDI%08%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%07%EF%BF%BD%12RS07%EF%BF%bdgl %1E%EF%BF%BD%D7%832%D1%A1%EF%BF%BD%275%EF%BF%BDV%EF%BF%BD
答案 0 :(得分:3)
您可能正在寻找HttpServerUtility.UrlDecode method:
HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.QueryString["token"]);
答案 1 :(得分:1)
您的错误在其他地方......
我在.Net 4.0项目中创建了一个新网页,并将其放在Page_Load中:
protected void Page_Load(object sender, EventArgs e)
{
var queryString = HttpContext.Current.Request.QueryString;
var token = queryString["token"];
throw new Exception(token);
}
然后我通过转到与您在上面提供的查询字符串匹配的URL来运行页面:
该页面对token
进行了解码,并将其显示在异常消息中:
ɐLEAUic:@QnõThm$ TB;咗
(URL正在编码二进制字符串,因此在打印实际字符串时,有些字符无法显示。)
如果您运行此操作且token
实际打印“%C9%90%04L ...”,那么您的令牌可能已被双重编码。所有百分号都将替换为“%25”,因此您的网址将如下所示:
由于您未提及“%25”,因此错误位于代码中的其他位置。您认为正在使用的URL不是正在解码的URL。