html <form id="userForm1" enctype="application/x-www-form-urlencoded" method="get" action="http://localhost/pc/enc/t1"> 輸入 2+2 2 2 瀏覽器: http://localhost/pc/enc/t1?name=2%2B2&nick=2+2&pass= 后台 入參 : [Request(GET //localhost:3070/pc/enc/t1?name=2%2B2&nick=2+2&pass=)@298a8a52] request獲取: - -------------name:2+2---------------------------- - -------------nick:2 2----------------------------
html:
<form id="userForm2" enctype="application/x-www-form-urlencoded" method="post" action="http://localhost/pc/enc/t2">
輸入:
2+2 2 2
瀏覽器:
http://localhost:3070/pc/enc/t2
后台:
入參 : [Request(POST //localhost:3070/pc/enc/t2)@edf57b2]
- -------------name:2+2----------------------------
- -------------nick:2 2----------------------------
總結:在form表單中編碼格式application/x-www-form-urlencoded的時候 get提交 比如參數name=2+2 -》 瀏覽器會變成name=2%2B2 -》 后台接口獲取參數的時候根據編碼規則會正常顯示2+2
form表單中編碼格式application/x-www-form-urlencoded
簡而言之(application/x-www-form-urlencoded):
2+2 -》2%2B2 -》 2+2
2 2 -》2+2 -》 2 2
以上描述的就是 從瀏覽器用戶填寫提交到瀏覽器跳轉到后台 整個一個閉環結束了,是一個完整的步驟。
而有些情況下我們看到這樣的描述 空格變+號 +號變空格 這個又是怎么回事呢?
我遇到的情況是這樣的:
1.先說+號變空格 比如:你在瀏覽器輸入 localhost/pc/name=2+2 你會發現你在后台取的時候變成了2 2 其實這個情況和之前是一個的,只是你沒有形成我說的一個完整的閉環,如果你想要后台得到的值是2+2,應該怎么做呢?
參考前面的簡而言之會發現。 我們應該把瀏覽器的url變成 localhost/pc/name=2%2B2 這樣的話后台取到的就么有問題了,這個加號應用比如token參數中包含+號,那么這個+號是有鏈接前后字符串的意義的,那么就需要用URLEncoder以下,當然你可以后台編碼,也可以前端編碼,
這個編碼應該是base64,可以先百度看下base64 里面可以還有一些坑 比如前后端編碼可能用的工具類實現的細節不一致導致回車符換行符的問題。基礎很重要。