对GET方法传递的参数进行编码解码
- 格式:doc
- 大小:27.00 KB
- 文档页数:1
JSjavascript实现url编码和url解码(urlEncodeurlDecode)本⽂转⾃:转载请保留。
表单通过get⽅式提交中⽂数据时,提交的中⽂会被转化为类似“%CC%EC%BF%D5”的编码,⽐如使⽤百度搜索时,中⽂关键词就会被转换,如何把url编码恢复成原来的汉字呢?使⽤PHP中的Urldecode函数可以轻易实现这个功能,但是如果是静态页⾯呢?这⾥可以使⽤下⾯的JAVASCRIPT函数来进⾏url解码。
以下是参考代码,新建⼀个html页⾯,负责以下代码到⾥⾯就可以看到效果:------------------------------------------<script language="javascript" type="text/javascript">function UnicodeChr() {return'00A4,00A7,00A8,00B0,00B1,00B7,00D7,00E0,00E1,00E8,00E9,00EA,00EC,00ED,00F2,00F3,00F7,00F9,00FA,00FC,0101,0113,011B,012B,014D,016B,01CE,01D0,01D2,01D4,01D6,01D8,01DA,0 }function AnsicodeChr() {return'A1E8,A1EC,A1A7,A1E3,A1C0,A1A4,A1C1,A8A4,A8A2,A8A8,A8A6,A8BA,A8AC,A8AA,A8B0,A8AE,A1C2,A8B4,A8B2,A8B9,A8A1,A8A5,A8A7,A8A9,A8AD,A8B1,A8A3,A8AB,A8AF,A8B3,A8B5,A8B }function UnicodeToAnsi(chrCode) {var chrHex = chrCode.toString(16);chrHex = "000" + chrHex.toUpperCase();chrHex = chrHex.substr(chrHex.length - 4);var i = UnicodeChr().indexOf(chrHex);if (i != -1) {chrHex = AnsicodeChr().substr(i, 4);}return parseInt(chrHex, 16);}function AnsiToUnicode(chrCode) {var chrHex = chrCode.toString(16);chrHex = "000" + chrHex.toUpperCase();chrHex = chrHex.substr(chrHex.length - 4);var i = AnsicodeChr().indexOf(chrHex);if (i != -1) {chrHex = UnicodeChr().substr(i, 4);}return parseInt(chrHex, 16);}function str2asc(str) {var n = UnicodeToAnsi(str.charCodeAt(0));var s = n.toString(16);return s.toUpperCase();}function asc2str(code) {var n = AnsiToUnicode(code);return String.fromCharCode(n);}//URL加密function urlEncode(str) {var ret = "";var strSpecial = "!\"#$%&’()*+,/:;<=>?[]^`{|}~%";var tt = "";for (var i = 0; i < str.length; i++) {var chr = str.charAt(i);var c = str2asc(chr);tt += chr + ":" + c + "n";if (parseInt("0x" + c) > 0x7f) {ret += "%" + c.slice(0, 2) + "%" + c.slice(-2);} else {if (chr == " ") ret += "+";else if (strSpecial.indexOf(chr) != -1) ret += "%" + c.toString(16);else ret += chr;}}return ret;}//URL解码function urlDecode(str) {var ret = "";for (var i = 0; i < str.length; i++) {var chr = str.charAt(i);if (chr == "+") {ret += " ";} else if (chr == "%") {var asc = str.substring(i + 1, i + 3); //alert(asc);if (parseInt("0x" + asc) > 0x7f) {ret += asc2str(parseInt("0x" + asc + str.substring(i + 4, i + 6)));i += 5;} else {ret += asc2str(parseInt("0x" + asc));i += 2;}} else {ret += chr;}}return ret;}</script></head><body><input id="button1" type="button" value="url解码" onclick="javascript:alert(urlDecode('%C6%A4%D0%AC'));"/> <input id="button2" type="button" value="url编码" onclick="javascript:alert(urlEncode('⽪鞋'));"/></body></html>----------------------------------------------------------------------以上就是javascript实现url编码/url解码(urlEncode/urlDecode)的demo,希望能对⼤家有所帮助。
Http请求⽅法之Get、Post原理什么是HTTP? HTTP,即超⽂本传输协议,是⼀种实现客户端和服务器之间通信的响应协议,它是⽤作客户端和服务器之间的请求。
客户端(浏览器)会向服务器提交HTTP请求;然后服务器向客户端返回响应;其中响应包含有关请求的状态信息,还可能包含请求的内容。
HTTP的常⽤⽅法 1、GET⽅法 GET⽅法⽤于使⽤给定的URI从给定服务器中检索信息,即从指定资源中请求数据。
使⽤GET⽅法的请求应该只是检索数据,并且不应对数据产⽣其他影响。
在GET请求的URL中发送查询字符串(名称/值对),需要这样写:/test/demo_form.php?name1=value1&name2=value2 说明:GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅⽤于请求数据(不修改)。
注:因GET请求的不安全性,在处理敏感数据时,绝不可以使⽤GET请求。
2、POST⽅法 POST⽅法⽤于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另⼀个下属。
POST请求永远不会被缓存,且对数据长度没有限制;我们⽆法从浏览器历史记录中查找到POST请求。
3、HEAD⽅法 HEAD⽅法与GET⽅法相同,但没有响应体,仅传输状态⾏和标题部分。
这对于恢复相应头部编写的元数据⾮常有⽤,⽽⽆需传输整个内容。
4、PUT⽅法 PUT⽅法⽤于将数据发送到服务器以创建或更新资源,它可以⽤上传的内容替换⽬标资源中的所有当前内容。
它会将包含的元素放在所提供的URI下,如果URI指⽰的是当前资源,则会被改变。
如果URI未指⽰当前资源,则服务器可以使⽤该URI 创建资源。
5、DELETE⽅法 DELETE⽅法⽤来删除指定的资源,它会删除URI给出的⽬标资源的所有当前内容。
6、CONNECT⽅法 CONNECT⽅法⽤来建⽴到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使⽤解码的HTTP代理来进⾏SSL编码的通信(HTTPS)。
JSP+MySQL中⽂乱码问题post提交乱码解决⽅案写了两个jsp页⾯index.jsp和mysql_insert.jsp。
数据处理流程为:在浏览器(chrome)上访问index.jsp后在其表单上输⼊数据,提交⾄mysql_insert.jsp,mysql_insert.jsp⾸先将接收到的数据按变量存⼊MySQL的html_db数据库的person_tb中(该表原有部分数据),然后mysql_insert.jsp再拿出该表中所有数据显⽰在mysql_insert.jsp页⾯上。
现在发现,当提交的数据中含有中⽂(⽐如变量姓名的值为中⽂)时,mysql_insert.jsp页⾯上显⽰新增的那条记录中的相应中⽂(姓名的值)乱码,其他数据都显⽰正常,查看数据库,发现也是相应的含有中⽂的变量值(姓名的值)乱码。
乱码情况如下图:index.jsp中第⼀⾏有语句:<%@ page contentType="text/html;charset=gb2312"%> ,在浏览器(chrome)中访问此页⾯时⽆乱码(主要指中⽂乱码,英⽂乱码现象还没遇见过)。
(试过将gb2312换成utf-8,访问后中⽂乱码)mysql_insert.jsp中第⼀⾏有语句:<%@page language="java" pageEncoding="UTF-8"%>,在浏览器中直接访问此页⾯时⽆乱码。
mysql_insert.jsp页⾯的代码如下:复制代码代码如下:<%@page language="java" pageEncoding="UTF-8"%><%@ page import="java.sql.*" %><HTML><HEAD><TITLE>add message into table </TITLE></HEAD><BODY><%String id=request.getParameter("id"); //从表单获得String name=request.getParameter("name"); //从表单获得String sex=request.getParameter("sex"); //从表单获得String age=request.getParameter("age"); //从表单获得try{/** 连接数据库参数 **/String driverName = "com.mysql.jdbc.Driver"; //驱动名称String DBUser = "root"; //mysql⽤户名String DBPasswd = "123456"; //mysql密码String DBName = "html_db"; //数据库名String connUrl = "jdbc:mysql://localhost/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;Class.forName(driverName).newInstance();Connection conn = DriverManager.getConnection(connUrl);Statement stmt = conn.createStatement();stmt.executeQuery("SET NAMES UTF8");String insert_sql = "insert into person_tb values('" + id + "','" + name + "','" + sex + "','" + age + "')";String query_sql = "select * from person_tb";try {stmt.execute(insert_sql);}catch(Exception e) {e.printStackTrace();}try {ResultSet rs = stmt.executeQuery(query_sql);while(rs.next()) {%>ID:<%=rs.getString("id")%> </br>姓名:<%=rs.getString("name")%> </br>性别:<%=rs.getString("sex")%> </br>年龄:<%=rs.getString("age")%> </br> </br><%}}catch(Exception e) {e.printStackTrace();}//rs.close();stmt.close();conn.close();}catch (Exception e) {e.printStackTrace();}%></body></html>我的数据库设置的是全部使⽤UTF-8编码,如下图:我的虚拟⽬录下的web.xml内容如下:tomcat/conf⽬录下的server.xml⽂件的内容如下:复制代码代码如下:<U><?xml version='1.0' encoding='utf-8'?></U><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="erDatabase"description="User database that can be updated and saved"factory="ers.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="erDatabaseRealm" resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service></Server>tomcat/conf⽬录下web.xml⽂件的主要内容如下:复制代码代码如下:<U><?xml version="1.0" encoding="UTF-8"?></U><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>jsp</servlet-name><servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class><init-param><param-name>fork</param-name><param-value>false</param-value></init-param><init-param><param-name>xpoweredBy</param-name><param-value>false</param-value></init-param><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- The mappings for the JSP servlet --><servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.jspx</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config><此处省略了mime-mapping的内容><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>现在我能想到的设置编码的地⽅也就只有这么多了,其他还有哪⾥需要设置编码?恳求指导。
模块1 网站建设基础一、填空题1. 全球信息网2. html、htm3. 域名、网站空间4. cascading style shee,被称为层叠样式表或级联样式表5. 记事本、HotDog Professional、HomeSite、UltraEdit、WYSIWYG Web Builder 8.1、Dreamweaver、Frontpage6. uniform resource locator7. HTML、HTML8. W3C9.JavaScript二、简答题1.写出URL包含的3部分内容的作用。
答:URL通常包括3部分,第一部分是Scheme,告诉浏览器该如何工作;第二部分是文件所在的主机;第三部分是文件的路径和文件名。
2.网页和网站有什么区别?答:网页是网站上的某一个页面,它是一个以扩展名为html或htm的文件,向浏览者传递信息的载体,以超文本和超媒体为技术,采用HTML、CSS、XML、JavaScript等语言来描述组成页面的元素,并通过浏览器进行解释,最后把结果信息通过浏览器在网页上显示出来。
网站(website)是指Internet上的一个固定的面向全世界发布消息的地方,由域名(也就是网站地址)和网站空间构成,通常包括主页和其他具有超链接文件的页面。
3.写出网站开发的基本流程。
答:1.建设网站前的市场分析2.建设网站的目的及功能定位3.网站技术解决方案4.网站内容及实现方式5.进行网页设计6.选择网页设计的工具7.费用预算8.网站测试9.网站维护10.网站发布与推广模块2 Web标准及其构成一、填空题1. W3C和ECMA2. 表现标准语言主要包括CSS,行为标准语言主要包括对象模型(如W3C DOM)、ECMAScript3. eXtensible HyperText Markup Language、文档结构二、简答题1.什么是Web标准?为什么要使用Web标准来开发网页?答:Web标准不是某一个标准,而是一系列标准的集合。
get请求传参中⽂乱码问题
原因: get⽅式提交的参数编码,只⽀持iso8859-1编码,⽽我们⼀般习惯都是把本地或者线上编码格式设置成UTF-8,前端加码,后天解码过程就会出现乱码的问题
解决⽅案:有两种解决⽅案
第⼀种是从根本上解决问题:
在客户端使⽤ URLEncoder.encode(“中⽂”,”UTF-8”)对中⽂参数进⾏编码,在服务器端需要进⾏解码
this.setName(.URLDecoder.decode(name, “UTF-8”));
⽐较⿇烦!
第⼆种⽐较简单,吧转码的事情交给web容器
在tomcat的server.xml中<Connector 标签中添加内容:URIEncoding="UTF-8" useBodyEncodingForURI="true"
我在解决这个问题的时候,有很多解决⽅案都只加了URIEncoding="UTF-8" ,我加了后还是乱码,连个属性⼀起⽤就解决了乱码问题。
protocol buffer编码与解码java代码实现Protocol Buffer编码与解码Java代码实现Protocol Buffer是一种高效的序列化机制,可以用于将结构化数据进行编码和解码,以便在网络中传输或存储。
在本篇文章中,我们将详细介绍如何使用Java代码实现Protocol Buffer的编码和解码功能。
第一步:安装Protocol Buffer首先,我们需要安装Protocol Buffer编译器和Java插件。
可以通过前往Protocol Buffer官方网站(安装完成后,可以通过运行以下命令来验证安装是否成功:protoc version如果能够输出版本号,则表示安装成功。
第二步:定义消息结构在Protocol Buffer中,消息结构以.proto文件的形式定义。
我们可以使用文本编辑器创建一个新的.proto文件,然后定义我们的消息结构。
首先,让我们创建一个名为Person的消息类型,其中包含姓名和年龄字段。
可以将以下内容添加到.proto文件中:syntax = "proto3";message Person {string name = 1;int32 age = 2;}注意,我们使用proto3语法进行定义,并为每个字段指定了唯一的一个编号,这些编号将用于在编码和解码时标识字段。
第三步:编译.proto文件完成消息结构的定义之后,我们需要使用Protocol Buffer编译器将.proto 文件编译成Java代码。
打开命令行界面,切换到.proto文件所在的目录,并运行以下命令:protoc java_out=./ ./example.proto这里的"./example.proto"是我们的.proto文件路径,"java_out=./"表示编译结果将会保存到当前目录下。
执行成功后,将会生成一个名为example.proto的Java文件,其中包含生成的Java类用于表示我们定义的消息类型。
一、简介在进行Web开发时,经常会涉及到使用GET方法传递数组的问题。
传统的GET方法传递参数只能传递键值对,无法直接传递数组。
然而,通过一些技巧和方法,我们可以实现在GET方法中传递数组,从而实现更加灵活的数据传递和处理。
二、问题分析1. 传统GET方法只能传递键值对,无法直接传递数组。
2. 有些场景下,我们需要传递数组参数,例如在URL中传递多个id 值。
3. 如何在GET方法中传递数组参数,是一个常见的问题。
三、解决方法1. 使用逗号分隔的方式传递数组参数。
我们可以将数组参数以逗号分隔的形式拼接成字符串,然后通过GET方法传递。
在服务器端接收到参数后,再将字符串按逗号分隔成数组。
示例:xxx2. 使用JSON格式传递数组参数。
JSON格式是一种常见的数据交换格式,我们可以将数组参数以JSON 格式编码后传递。
在服务器端接收到参数后,再进行解析得到数组。
示例:xxx3. 使用Base64编码传递数组参数。
将数组参数进行Base64编码后,再通过GET方法传递。
在服务器端接收到参数后,再进行Base64解码得到数组。
示例:xxx四、注意事项1. URL长度限制。
GET方法传递参数时,URL长度是有限制的,需要注意传递的数组参数长度不要超出URL的限制。
2. 参数安全性。
在传递数组参数时,需要考虑参数的安全性和合法性,避免恶意构造参数导致安全问题。
五、总结通过一些技巧和方法,我们可以实现在GET方法中传递数组参数。
在实际开发中,我们需要根据具体场景和需求选择合适的方法来传递数组参数,并注意参数的安全性和合法性。
希望本文对大家能有所帮助,谢谢阅读。
六、应用场景1. 前端传递多选框中选中的值在前端页面中,我们经常会使用多选框来让用户选择多个选项,而这些选项的值需要被传递到后端进行处理。
这时候就可以使用GET方法传递数组参数的技巧,将多选框中选中的值拼接成数组并通过GET方法传递到后端,以便后端进行相应的业务逻辑处理。
get请求数组传参一、介绍和背景在进行网络开发和接口调用时,常常需要传递参数给服务器进行请求。
而GET请求是一种常见的网络请求方式,通过将参数附加在URL上,传递给服务器。
有时候,我们需要传递一个参数的数组给服务器,以满足多个查询条件或批量操作的要求。
本文将探讨如何使用GET请求传递数组参数。
二、传递数组参数的需求在实际开发中,有很多场景需要传递数组参数给服务器。
以下是一些常见的需求:1.批量操作:例如批量删除、批量更新等操作,需要将多个操作对象的标识符传递给服务器。
2.多个查询条件:例如在搜索功能中,可以通过传递多个查询条件的数组来筛选结果。
3.多值参数:例如在过滤功能中,可以通过传递多个选项的值的数组来进行筛选。
为了满足这些需求,我们需要将数组参数传递给服务器,以便服务器能够正确地解析和处理这些参数。
三、URL编码和参数拼接在将数组参数传递给服务器之前,我们需要对参数进行编码和拼接。
这是因为URL 中只能包含特定的字符,某些字符(如空格、逗号、方括号等)需要进行编码才能在URL中使用。
我们可以使用encodeURIComponent()函数对参数进行编码,该函数会将特定字符替换为%xx的形式,其中xx是该字符的ASCII码。
一般情况下,我们需要将参数值进行编码,然后拼接到URL中。
下面是一个示例,展示了如何将数组参数进行编码和拼接:var params = {ids: [1, 2, 3],names: ['Alice', 'Bob', 'Charlie']};var url = 'for (var key in params) {if (params.hasOwnProperty(key)) {var value = params[key];if (Array.isArray(value)) {value.forEach(function(item) {url += encodeURIComponent(key) + '[]=' + encodeURIComponent(item) + '& ';});} else {url += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&';}}}// 去除最后一个'&'字符url = url.slice(0, -1);console.log(url);运行上述代码,结果将输出如下URL:``````。
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc(很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080/servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串"%xy" 表示,其中xy为该字节的两位十六进制表示形式。
我这里说的可能不清楚,具体介绍可以看下.URLEncoder类的介绍在这里。
了解了URL encode的过程,我们能看到2个很重要的问题,第一:需要URL encode的字符一般都是非ASCII的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get方法提交数据的编码方式。