对GET方法传递的参数进行编码解码

合集下载

JSjavascript实现url编码和url解码(urlEncodeurlDecode)

JSjavascript实现url编码和url解码(urlEncodeurlDecode)

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请求方法之Get、Post原理

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+MySQL中文乱码问题post提交乱码解决方案

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请求传参中文乱码问题

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" ,我加了后还是乱码,连个属性⼀起⽤就解决了乱码问题。

setCharacterEncoding

setCharacterEncoding

对于表单中POST方式提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。有写读者可能会问,那如何得到浏览器编码呢?上面我们提过了,在默认请情况下,浏览器编码就是你在响应该请求的JSP页面中response.setCharacterEncoding设置的值。所以对于POST表单提交的数据,在获得数据的JSP页面中request.setCharacterEncoding要和生成提交该表单的JSP页面的 response.setCharacterEncoding设置成相同的值。
setCharacterEncoding
2010-06-11 15:49:51| 分类: java天空 |举报|字号 订阅
1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。
2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。
3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
4、response.setCharacterEncoding("UTF-8")的作用是指.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。所以在无论你在JSP中设置response.setCharacterEncoding ("UTF-8")或者response.setCharacterEncoding("GBK"),浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的,比如正确设置了pageEncoding参数等)。

protocol buffer编码与解码 java代码实现

protocol buffer编码与解码 java代码实现

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类用于表示我们定义的消息类型。

.net get方法传递数组

.net get方法传递数组

一、简介在进行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方法传递到后端,以便后端进行相应的业务逻辑处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档