我必须通过网络发送数据。使用哪种编码更好
Base64 还是 Base64URL?
在我的节点应用程序中,我尝试使用以下代码更改我的 cookie 值。但是当我设置一些 cookie 值时,我看到它在浏览器的响应标头中被修改。节点代码:
let nonEncodedString ='s%3A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%2FFT3TM64riv3QAs'
res.cookie('connect.sid', nonEncodedString , { maxAge, httpOnly: true, overwrite: true });
Run Code Online (Sandbox Code Playgroud)
但我得到的标题是
set-cookie: connect.sid=s%253A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%252FFT3TM64riv3QAs; Max-Age=157680000; Path=/; Expires=Thu, 31 Jul 2025 11:28:35 GMT; HttpOnly
Run Code Online (Sandbox Code Playgroud)
本质
s%3A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%2FFT3TM64riv3QAs
上改为
s%253A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%252FFT3TM64riv3QAs. IE。正在添加“25”。
我认为这是因为它正在进行 URL 编码。我不希望这种情况发生,因为它改变了我发送的值,并且在浏览器将其设置在 cookie 中之前我无法控制解析它。
我知道这不是 FastAPI 问题,但如何使用 FastAPI 避免这种情况?
例如:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def root(q: str):
return {"message": f"{q}"}
Run Code Online (Sandbox Code Playgroud)
发出以下请求:
http://127.0.0.1:8000/?q=1+1
Run Code Online (Sandbox Code Playgroud)
返回:
{"message":"1 1"}
Run Code Online (Sandbox Code Playgroud) 我认为在表单中输入的值是由浏览器正确编码的.
但是这个简单的测试文件"test_get_vs_encodeuri.html"显示它不是真的:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
</head><body>
<form id="test" action="test_get_vs_encodeuri.html" method="GET" onsubmit="alert(encodeURIComponent(this.one.value));">
<input name="one" type="text" value="Euro-€">
<input type="submit" value="SUBMIT">
</form>
</body></html>
Run Code Online (Sandbox Code Playgroud)
点击提交按钮时:
encodeURICompenent将输入值编码为"Euro-%E2%82%AC"
浏览器进入GET查询时只写一个简单的"Euro-%80"
有人能解释一下吗
如何使用Javascript以与Borwser的FORM(windows-1252)相同的方式编码所有内容?(转义函数不起作用,encodeURIComponent也不起作用)?
或者encodeURIComponent进行不必要的转换?
有没有办法让玩!框架忽略斜杠和?部分URL?
通常,如果我有以下内容:
www.123.com/api/link/http:www.bla.com/?contenId=123&User=test
它不会起作用.在这种情况下,我想要做的只是在String变量中的URL的最后部分中链接以保存它.我想我可以强制客户更换/和?别的东西,但我宁愿保持简单.
我的第一个想法是,可能有一种方法来配置路由,以便我们有类似的东西:
/api/link/{data}
哪里data会保留URL的剩余部分.但是无法知道如何做到这一点.
我想知道什么是url编码.我有2个jsp页面和一个servlet.当我运行应用程序时,显示的URL是:
http://localhost:8080/myproject/index.jsp
哪里
index.jsp:
<form action="Myservlet" method="post">
<input type="text" name="mytext" id="mytext"/>
<input type="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)
单击提交按钮后,显示的URL为:
http://localhost:8080/myproject/Myservlet
URL编码是什么意思?我该如何编码网址?
从index.jsp去Myservlet再到result.jsp
Myservet#doPost //我需要在这里进行URL编码吗?如果有,怎么样?
fetching data from db.......
....................
String nextJSP = "/result.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request,response);
Run Code Online (Sandbox Code Playgroud)
result.jsp中
displays data here
我有一个参数,我必须作为网址的一部分传递.该参数包含以下字符:ß
当我编码这个字符串时,我期待这个:%DF,但我得到:%c3%9f
这是我用来测试的一系列C#
string test = HttpUtility.UrlEncode("ß");
Run Code Online (Sandbox Code Playgroud) 我有一个字符串(C#代码),如下所示:
string s = "Indsætning";
Run Code Online (Sandbox Code Playgroud)
它以某种方式编码,我不确定.
我想解码它,以便我得到以下字符串:
Indsætning
Run Code Online (Sandbox Code Playgroud)
我试过了
string s1 = HttpUtility.UrlDecode(s);
string s2 = HttpUtility.HtmlDecode(s);
Run Code Online (Sandbox Code Playgroud)
但是,我没有得到我正在寻找的字符串.
任何帮助表示赞赏.
我正在尝试由多字字符串构成一个URL:
$str = "my string"
Run Code Online (Sandbox Code Playgroud)
而我试图得到:
"http mysite.com/search/my%20string"
Run Code Online (Sandbox Code Playgroud)
但我无法使用PHP做到这一点。
urlencode($str) => "my+string"
rawurlencode($str)=>"my string"
Run Code Online (Sandbox Code Playgroud)
我怎么能得到"my%20string"?
谢谢你的帮助 !
也许我可以做,str_replace(urlencode(),etc);
但是urlencode是否有一个参数,这样它本身就可以正确转换?
事实证明,正如Amal Murali所说的那样,rawurlencode()确实如此,当我将鼠标悬停在链接上时,在浏览器中看不到它。
但是,当我检查源代码或单击链接时,会看到rawurlencode();生成正确的链接。(带有%20。)。
urlencode ×10
encoding ×3
c# ×2
java ×2
javascript ×2
python ×2
url-encoding ×2
cookies ×1
fastapi ×1
http ×1
jsp ×1
node.js ×1
php ×1
rawurl ×1
servlets ×1
starlette ×1
url ×1
url-routing ×1
whitespace ×1