首页 > 其他分享 >POST和GET请求乱码问题

POST和GET请求乱码问题

时间:2024-07-02 15:34:00浏览次数:1  
标签:问题 请求 GET 乱码 过滤器 post 编码方式 POST

简介:在很多情况下我们使用get或者post请求时会出现乱码问题。本文的目标是教会读者解决该问题。

1.get请求乱码问题

使用get请求提交数据时,数据会回显在uri上,例如:/springmvc/login?username=张三&password =123(注意:这不是一个很好的示范username和password这种敏感信息不应该使用get请求明文显示),这个时候如果出现中文字符比如"张三",就可能出现乱码问题。
乱码问题的本质是uri编码不兼容。该问题常常出现在tomcat9一下版本,而tomcat9以上版本,默认编码为utf-8,tomcat9一下版本默认编码是ISO-8859-1,由此导致乱码问题。
所以,为了解决乱码问题我们需要设置uri编码方式。
tomcat服务器配置在CATALINA_HOME/conf/server.xml或者conf/server.xml中,该文件大概69行会出现<Connector>标签,只需要在该标签中添加编码方式URIEncoding=UTF-8即可。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               URIEncoding=UTF-8
               />

2.post请求乱码问题

使用post请求时,数据携带在请求体中。如果请求体出现中文文字,且编码方式不兼容,便会出现乱码。但是我们在tomcat10中不需要担心这个问题,因为tomcat10已经帮我们将请求编码方式设置为UTF-8。如果需要手动解决该问题。我们可以通过下面方法解决post请求的乱码问题。

方式一:设置request的编码方式

我们可以通过对请求的编码方式进行设置,解决乱码。采用语句 request.setCharacterEncoding("UTF-8")来解决问题。请注意该设置request编码方式及语句必须在request.getParamter("xxx")之前执行否则没有效果。并且如果是SpringMVC框架,以javabean或者pojo(参考《SpringMVC的数据获取问题》)获取数据时也不能生效。

方式二:采用过滤器来来解决post乱码问题

如果我们可以在获取数据前便将post请求编码方式设置为utf-8那么我们就可以解决方法一中得第二点不足。我们可以考虑采用过滤器得方法。过滤器在DispatcherServlet之前,将编码方式设置为ut-8那么问题迎刃而解。

编写过滤器:

配置过滤器:

方式三:使用内置字符过滤器

实际上,SpringMVC框架中内置一个子符过滤器。
encoding属性代表编码方式。 如果 forceRequestEncoding设置为true,那么请求强制使用 encoding得编码方式。同理forceResponseEncoding设置为true那么响应强制使用 encoding得编码方式

xml配置:

<!--字符编码过滤器-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceRequestEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

标签:问题,请求,GET,乱码,过滤器,post,编码方式,POST
From: https://www.cnblogs.com/bobospace/p/18279824

相关文章

  • 如何在Oracle、MySQL、PostgreSQL中改变SQL提示格式
    HowtoChangeinSQLPromptformatinOracle,MySQL,PostgreSQL像UNIX的PS1环境变量可以改变shell操作提示符,在日常工作环境中可以提升一些效率可以防止一些误操作,很多年前在看tom关于在练习oracle操作前的一些环境配置像login.sql,比起”SQL>”还可以显示当前的用......
  • 如何在Oracle、MySQL、Postgresql中查找全表扫描SQL
    HowtofindfulltablescanSQLinOracle,MySQL,Postgresql?Queriesthatdo“fulltablescan”aretheonesthatdon’tuseindexes.However,itismoresuitabletouseafulltablescanforsmalltables,anditwillnotcauseperformanceproblems.Or......
  • 京东商品详情数据接口(JD.item_get)
    京东(JD.COM)作为一个大型电商平台,提供了丰富的API接口供开发者使用,以便实现与京东平台的数据交互。然而,关于你提到的“京东商品详情数据接口(JD.item_get)”,这并不是京东官方直接提供的API接口名称。京东的开放平台(JDP)通常提供了一系列API,如商品查询、订单查询、物流查询等,但具体......
  • Qt QTableWidget resizeRowsToContents非常慢
    QTableWidget是Qt框架中的一个表格控件,用于显示和编辑表格数据。resizeRowsToContents是QTableWidget的一个函数,用于自动调整表格行的高度以适应内容。该函数在某些情况下可能会导致性能问题,特别是当表格中的行数较多或者表格中的内容较复杂时。这是因为该函数需要遍......
  • ts vue3 getCurrentInstance 使用,$refs 调用方式
    代码示例可以通过ref变量实现绑定$ref,或者getCurrentInstance来获取$refs/***$ref使用方式,变量名和组件的属性ref值一致*/consthChildRef=ref()console.log(hChildRef,"hChildRef")constinstance=getCurrentInstance()//constself=(instanceasComponen......
  • Apipost接口测试工具的原理及应用详解(四)
    本系列文章简介:        随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为软件开发过程中不可或缺的一环。在众多API测试工具中,Apipost......
  • Apipost接口测试工具的原理及应用详解(五)
    本系列文章简介:        随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为软件开发过程中不可或缺的一环。在众多API测试工具中,Apipost......
  • Qt:6.QWidget属性介绍(windowTitle、windowIcon、windowOpacity)以及QRC机制
    一、windowTitle属性-窗口标题:1.1windowTitle属性介绍:在Qt中,windowTitle属性是QWidget类提供的一个属性,用于设置和获取窗口的标题文本。它通常用于设置顶级窗口的标题栏显示内容。1.2设置窗口标题——setWindowTitle():widget->setWindowTitle("这是窗口标题");1......
  • postgresql pg_dump备份参数,不排除指定表名原因
    最近用pg_dump备份数据库搭建测试环境,想排除某些数据量大的表,但从备份出的bmp文件发现并没有排除指定表名,多次尝试后发现原因起初我的指令是这样的(错误):pg_dump-h10.***.***.**-p5432-Upostgres-ddatabase-nschema--exclude-table='*_copy'--section=data>/u01/bac......
  • PostGreSQL在线扩展PostGIS
    1简介    当需要进行地理信息系统(GIS)查询时,安装和使用PostGIS扩展非常有用。它允许你在PostgreSQL中存储、查询和分析地理和空间数据,例如范围查询、距离计算、地理坐标转换等。使用合适的地理索引来加速查询;考虑将地理数据规范化以降低存储开销;2安装扩展所......