C# 查询字符串的奇怪编码
我为演示创建了两个aspx页面 第1页-WebForm1.aspxC# 查询字符串的奇怪编码,c#,encoding,request.querystring,C#,Encoding,Request.querystring,我为演示创建了两个aspx页面 第1页-WebForm1.aspx <asp:TextBox ID="txtTest" runat="server" Width="100px"></asp:TextBox> <asp:Button ID="btnClick" runat="server" Text="test" Width="100px" OnClick="btnClick_Click"/> protected void Page_Load(obje
<asp:TextBox ID="txtTest" runat="server" Width="100px"></asp:TextBox>
<asp:Button ID="btnClick" runat="server" Text="test" Width="100px" OnClick="btnClick_Click"/>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["text"] == null || string.IsNullOrEmpty(Request.QueryString["text"].ToString()))
txtTest.Text = "ö";
else
txtTest.Text = Request.QueryString["text"].ToString();
}
}
public void btnClick_Click(object sender, EventArgs e)
{
HttpResponse response = HttpContext.Current.Response;
response.Write(string.Format("<script>window.location = '{0}';</script>", HttpUtility.JavaScriptStringEncode("WebForm2.aspx?text=" + HttpUtility.UrlEncode(txtTest.Text))));
response.End();
}
我们可以看到URL主体有奇怪的编码,为什么要生成%u00f6?它能回到%c3%b6吗?
当我们点击后退按钮返回到第1页时,它的推荐人不见了。实际上,我认为奇怪的编码导致了这个问题,因为当我使用F12开发人员工具更改操作(从“%u00f6”更改为“%c3%b6”),然后单击“上一步”按钮时,生成了引用者
如果您能给出答案,我将不胜感激。编码行为是一种标准。根据 2.4。何时编码或解码 在正常情况下,URI中八位字节的唯一时间
在从生成URI的过程中,
它的组成部分。这是一个实现确定哪个 保留字符的个数将用作子组件分隔符
并且可以安全地用作数据。一旦产生了URI,它总是 以百分比编码的形式 当URI被取消引用时,组件和子组件 对特定于方案的解引用过程(如有)具有重要意义
必须在内部编码的八位字节百分比之前进行分析和分隔 这些组件可以被安全地解码,否则数据可能会丢失
被误认为是组件分隔符。唯一的例外是
与未保留字符中的字符相对应的编码八位字节百分比
设置,可随时解码。例如,八位组
与波浪号相对应的(~)字符通常编码为“%7E”
通过旧的URI处理实现;“%7E”可以替换为 “~”而不改变其解释 因为百分比(“%”字符用作
百分比编码的八位字节,必须将其百分比编码为“%25”才能进行编码
在URI中用作数据的八位字节。实施不得
百分比对同一字符串进行多次编码或解码,如解码
已解码的字符串可能会导致误解百分比
在
百分比编码的情况是对已经百分比编码的字符串进行编码 如果要进行一些测试,还可以使用查看预期的url编码输出 至于推荐人失踪的原因,你可以看看 当最终用户
- 在浏览器地址栏本身中输入网站URL
- 通过浏览器维护的书签访问站点
- 作为窗口/选项卡中的第一页访问了站点
- 单击外部应用程序中的链接
- 从https URL切换到http URL
- 从https URL切换到其他https URL
- 已安装安全软件(防病毒/防火墙/等),可从所有请求中删除推荐人
- 在一个代理后面,该代理从所有请求中删除推荐人
- 以编程方式访问该站点(如curl),而无需设置引用者标题(searchbots!)
谢谢你,约翰!我正在阅读并尝试第一个答案。从我的样本来看,它不在导致推荐人失踪的列表中。当我在表单中手动更改操作(从“%u00f6”更改为“%c3%b6”),然后单击“上一步”按钮时,将返回推荐人。如果您对此感兴趣,可以查看。
<asp:TextBox ID="txtResult" runat="server" Width="200px"></asp:TextBox>
<asp:Button ID="btnBack" runat="server" Text="back" Width="50px" OnClick="btnBack_Click"/>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["text"] == null || string.IsNullOrEmpty(Request.QueryString["text"].ToString()))
txtResult.Text = "empty";
else
txtResult.Text = Request.QueryString["text"].ToString();
}
}
public void btnBack_Click(object sender, EventArgs e)
{
HttpResponse response = HttpContext.Current.Response;
response.Write(string.Format("<script>window.location = '{0}';</script>", HttpUtility.JavaScriptStringEncode("WebForm1.aspx?text=" + HttpUtility.UrlEncode(txtResult.Text))));
response.End();
}
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
6 200 HTTP localhost:56484 /WebForm2.aspx?text=%c3%b6 835 private text/html; charset=utf-8 iexplore:12316
8 200 HTTP localhost:56484 /WebForm2.aspx?text=%u00f6 175 private text/html; charset=utf-8 iexplore:12316
9 200 HTTP localhost:56484 /WebForm1.aspx?text=%c3%b6 830 private text/html; charset=utf-8 iexplore:12316
10 200 HTTP localhost:56484 /WebForm1.aspx?text=%u00f6 175 private text/html; charset=utf-8 iexplore:12316
11 200 HTTP localhost:56484 /WebForm2.aspx?text=%c3%b6 834 private text/html; charset=utf-8 iexplore:12316