首页 » 网站推广 » phpform表单乱码技巧_关于乱码问题的解决与HttpServletResponse中的方法

phpform表单乱码技巧_关于乱码问题的解决与HttpServletResponse中的方法

访客 2024-11-24 0

扫一扫用手机浏览

文章目录 [+]

声明:本栏目所利用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有终极阐明权;凯哥学堂旨在促进VIP学员相互学习的根本上公开条记。

关于乱码问题的办理

phpform表单乱码技巧_关于乱码问题的解决与HttpServletResponse中的方法

会有乱码征象,实在便是由于字符集编码不一致的问题,就彷佛中国人和外国人发言一样,相互不懂对方在说啥。
字符集编码也是如此,本来便是一段GBK编码的笔墨,却要用utf-8的编码格式去解码,就当然是鸡同鸭讲会涌现乱码啦,这个时候就得利用GBK编码的格式去解码才不会出问题。
如果相互都是利用的GBK编码后,那就像中国人和中国人都说普通话一样,就能听懂对方在说什么,这样才不会涌现乱码。

phpform表单乱码技巧_关于乱码问题的解决与HttpServletResponse中的方法
(图片来自网络侵删)

在web开拓中,要求或相应数据时涌现乱码,每每便是客户端和做事真个编码不一致的问题所导致的。

不过在先容如何办理乱码的问题前,我们先看看HttpServletRequest中关于得到表单数据的一些方法,虽然在上一篇也先容了利用办法,不过关于乱码和拿到详细的值这方面没有涉及到:

得到和设置表单数据方法(如果是上传文件的话则无法获取文件中的数据):

既然和表单有关,那么就得先写一个大略的html表单代码,我们可以在Eclipse中创建一个html文件:

可能利用Eclipse编写HTML的代码不太方便,我们也可以利用一个专门编写html代码的工具来编写Eclipse里已经创建了的html文件,我这里利用HBuilder作为示例:

1.复制Eclipse中的html文件所在目录的路径:

2.在HBuilder中点击文件,然后选择打开目录把复制的文件路径粘贴进去,并为这个工程起一个新的名称:

工程目录如下:

如图,可以看到index.html已经在这个工程下了,我们可以在HBuilder中编辑这个html文件,编辑的内容会同步到Eclipse,由于它俩访问的都是同一个目录同一个html文件。

3.我在HBuilder编辑的代码如下:

4.再看看Eclipse发生了什么:

可以看到代码是同步的。

浏览器运行结果:

以下利用实际代码演示常用的几个得到表单数据的方法,代码示例:

在Eclipse中实行html文件,Eclipse有一个内置的浏览器:

如果要在其他的浏览器则须要利用这个URL地址:

http://localhost:8080/TestResponse/index.html

不要直接在HBuilder中运行这个html文件,由于它的URL是指向HBuilder的工程路径的。

掌握台打印结果:

如图,可以看到我们将所有的值都获得到手了。

得到表单数据的时候要把稳一个问题:当你须要得到一个属性的值时,如果得到的结果为null,那么便是由于表单数据中并没有这个属性的存在。
例如我得到一个不存在的属性:

掌握台打印结果:

可以看到结果为null,以是当你得到表单数据进行某些操作时,涌现了空指针非常的话,很有可能便是由于代码上写错了得到了一个不存在的属性。

如果表单数据中的某个属性值没有写,那么得到的将是一个空字符串,而非null,例如:

掌握台打印结果:

如图,并没有打印null,而是打印空缺,这个空缺便是一个空字符串:’’

会涌现乱码的情形,以及办理方法:

现在我们修正一下代码把表单提交的方法改为post,再运行一次,看看掌握台的打印结果,html代码示例:

Java代码示例:

提交的表单:

掌握台的打印结果:

可以看到掌握台中的打印结果涌现了不能识别的字符,办理方法很大略,利用setCharacterEncoding(String)方法,设置表单提交的数据的编码格式即可:

运行结果:

把稳:除了在Java代码中须要设置编码格式,在html文件中也要设置好编码格式,如果html中不设置编码格式的话,即便在Java代码中利用了setCharacterEncoding(String)方法设置了也没有用,以是这是双向的,例如我把html文件中设置编码格式的标签给删掉:

可以看到在网页上显示都是乱码(这是由于Eclipse内置的浏览器缘故原由,一样平常市情上的浏览器提前预设了字符编码,以是不会涌现这种情形)

掌握台打印结果:

果真涌现了不能识别的字符,以是html文件也是须要设置好编码的,不然的话就会涌现乱码的情形。

下面来看看浏览器的地址栏中为什么能够显示中文:

这实在是由于浏览器转码了,可以把这个URL复制到记事本中:

可以看到是一堆的编码,并没有显示中文,以是实际上浏览器便是把这个编码给转换成了中文而已。

只要不属于128个字符内的字符,在地址栏中都会转换成这种格式的编码,这些编码格式是采取的16进制的编码格式,以上面这文本示例编码对应的中文:

如图,每一个16进制编码都因此%开头,这是utf-8编码的中文,以是一个中笔墨对应3个16进制编码。

如果是GBK编码格式的中文则是一个中笔墨对应2个16进制编码,但是GBK编码格式转换成的16进制编码不能被浏览器转换,会仍旧显示着16进制编码:

中笔墨对应的16进制编码:

如图,GBK编码格式的中笔墨和utf-8编码的中笔墨不一样,是2个16进制编码对应一个中笔墨。

关于客户端要求数据方面的乱码情形就先容这么多,其余相应数据中涌现乱码的情形和解决方法在先容HttpServletResponse方法部分进行解释。

思维导图:

HttpServletResponse中的方法

HttpServletResponse接口类型的工具是封装做事端相应数据的,以是这个工具中的方法都是与相应数据干系。
以下罗列一些常用的方法:

下面利用实际的例子,演示以上方法的利用办法:

编辑相应头一类的方法:

代码示例:

在做事端设置相应数据的编码格式是很有必要的,这么做同样的也是为了避免涌现乱码的问题。
例如以下这个示例,我不设置相应数据的编码格式,并输出一段中文,看看会发生什么,代码示例:

运行结果:

如图,可以看到,没有设置相应数据的编码格式的话,输出中文就会无法被识别。

这种问题设置一下相应数据的编码格式就好了,但是做事端设置的编码格式,要与浏览器真个编码格式对应上,如果不对应的话仍旧会是乱码,代码示例:

运行结果:

添加新的相应头数据:

代码示例:

打开TCP/IP Monitor窗口,可以看到以上代码添加进相应头的数据:

得到设置的相应头信息:

代码示例:

掌握台打印结果:

修正相应头信息:

代码示例:

TCP/IP Monitor窗口:

总结:

办理客户端表单提交数据乱码的问题,须要利用setCharacterEncoding(String)方法,设置好与客户端对应的编码格式。

办理做事端相应数据乱码的问题,则利用setCharacterEncoding(String)方法,设置好对应的编码格式。

HttpServletRequest是封装要求数据的工具,以是它的方法都是与客户端要求信息干系的。

HttpServletResponse是封装相应数据的工具,以是它的方法都是与做事端相应信息干系的。

标签:

相关文章