bks*_*day 5 javascript forms encoding
说我有一个这样的简单形式:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="search">
<form method="GET" action="/super-action">
<input type="text" name="q" />
</form>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输入如下: @tags "Cinéma Whatever"
表单GET请求会生成一个类似于以下内容的网址: /super-action?q=%40tags+"Cinéma+Whatever"
现在我想用location.hash中的javascript重现它,用井号而不是斜线,如: /super-action#q=%40tags+"Cinéma+Whatever"
但是通过可用的功能,我得到了结果:
@tags%20%22Cin%E9ma%20Whatever%22 @tags%20%22Cin%C3%A9ma%20Whatever%22 %40tags%20%22Cin%C3%A9ma%20Whatever%22 %40tags+%22Cin%C3%A9ma+Whatever%22问题:如何创建输入值,例如@tags "Cinéma Whatever",看起来像GET请求表单会做什么:%40tags+"Cinéma+Whatever"使用javascript?
根据RFC 1738,/super-action?q=%40tags+"Cin\xc3\xa9ma+Whatever"在 URL 内无效:
\n\n\n因此,只有字母数字、特殊字符“$-_.+!*\'(),”和用于其保留目的的保留字符可以在 URL 中以未编码的方式使用。
\n
这意味着您无法生成包含该子字符串的有效 URL。您必须对特殊字符"和进行编码\xc3\xa9,否则生成的字符串不是 URL。
您认为这是有效的原因可能是您的浏览器对您开了个玩笑:它可能以部分编码的形式显示 URL,以便更容易在地址栏中阅读。尝试使用 Wireshark 等协议分析器来检查通过网络发送的实际URL 路径。
\n\n更新:我很快确认了这一点,针对表单提交发送的 HTTP 标头如下:
\n\nGET /?q=%40tags+%22Cin%C3%A9ma+Whatever%22 HTTP/1.1\nRun Code Online (Sandbox Code Playgroud)\n\n所以首先是UTF-8编码,然后是URL编码。
\n| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |