一、解决 jQuery Ajax 请求中的 GBK 乱码问题
在前端开发中,我们经常会使用 jQuery Ajax 来进行异步数据请求。如果你的网页涉及到不同编码方式的数据交互,尤其是 GBK 编码,有时候会遇到乱码问题。这确实让人头疼,因为乱码不仅影响用户体验,还会造成数据处理的困难。
那么,究竟为什么会出现这种乱码现象呢?通常是由于服务器返回的数据编码与浏览器接收到的数据编码不一致造成的。今天,我想和大家分享一些解决 jQuery Ajax 请求中 GBK 乱码问题的方法。
为什么会出现 GBK 乱码?
在我们进行 Ajax 请求时,默认情况下,jQuery 使用的是 UTF-8 编码。如果服务器处理的内容是 GBK 编码,那么浏览器在解析这些内容时就可能出现乱码。具体来说,这与以下几点有关:
- 服务器响应头未正确设置编码,例如没有指定
Content-Type
为 text/html; charset=GBK。 - Ajax 请求的 dataType 设置不当,浏览器不知如何处理响应数据。
- 前端页面的编码与服务器返回的响应编码不匹配,造成解释混乱。
解决 GBK 乱码问题的方法
为了避免这种乱码情况,我们可以采取以下几种解决方案:
1. 确保服务器正确设置编码
首先,确保你的服务器在响应头中正确设置了编码。你可以在服务器端代码中添加这段代码:
header('Content-Type: text/html; charset=GBK');
这样可以保证浏览器获取到的数据是已正确编码的格式。
2. 处理响应数据的编码
在 jQuery Ajax 请求中,如果你预期返回的数据是 GBK 编码,可以使用以下方法手动转换编码:
$.ajax({ url: '你的接口地址', type: 'GET', success: function(response){ let decodedData = iconv.decode(Buffer.from(response, 'binary'), 'GBK'); console.log(decodedData); }});
这里,我们使用了 iconv-lite 库来处理字符编码。在处理成功的回调中,我们将 GBK 数据解码为 UTF-8。
3. 修改 Ajax 请求的 dataType
最后,确保在进行 Ajax 请求时正确设置 dataType。例如:
$.ajax({ url: '你的接口地址', type: 'GET', dataType: 'text', success: function(response){ let decodedData = iconv.decode(Buffer.from(response, 'binary'), 'GBK'); console.log(decodedData); }});
在这里设置 dataType 为 'text',可以防止 jQuery 对响应内容进行自动解析,方便后续手动处理编码问题。
通过实践来掌握编码
编码这一概念,虽然看似复杂,但只要把握好原则,解决起来其实并不难。在处理网络请求时,经常会面临各种编码问题。因此,我建议大家在开发过程中可以借助 Postman 等工具提前测试接口编码,确保数据正常传输。
此外,保持前端与后端的沟通,确保所用编码方式一致,也能有效避免日后的问题。在工程项目中,团队内部的协作尤为重要,好的沟通可以让我们减少许多不必要的麻烦。
最后,希望大家在使用 jQuery Ajax 进行数据交互时,都能顺利解决 GBK 乱码的问题。如果你还有其他相关的问题,欢迎在评论区留言讨论,我们一起交流!
二、解决jQuery GBK乱码问题的方法
什么是jQuery GBK乱码问题
jQuery是广泛使用的JavaScript库,用于开发Web应用程序。然而,当使用jQuery处理GBK编码的文本时,有时可能会遇到乱码问题。
为什么会出现jQuery GBK乱码问题
在GBK编码中,一个中文字符占用2个字节,而在JavaScript中,一个字符通常表示为1个字节。当使用jQuery处理GBK编码的文本时,由于编码长度不一致,可能导致字符显示错误,从而出现乱码问题。
如何解决jQuery GBK乱码问题
有两种常见的解决方法:
-
方法一:转换编码
可以使用JavaScript提供的
encodeURIComponent
函数将GBK编码的文本转换为URL编码格式,然后再使用decodeURIComponent
函数将其解码。这样可以确保在JavaScript中正确处理GBK编码的文本。// 示例代码 var gbkText = "中文内容"; var encodedText = encodeURIComponent(gbkText); var decodedText = decodeURIComponent(encodedText); console.log(decodedText); // 输出:中文内容
-
方法二:使用外部库
除了手动转换编码外,还可以使用一些专门处理编码的外部库,如iconv-lite、jschardet等。这些库提供了更多的编码转换选项,可以更方便地解决jQuery GBK乱码问题。
// 示例代码(使用iconv-lite库) var iconv = require('iconv-lite'); var gbkBuffer = new Buffer("中文内容", 'binary'); var utf8Text = iconv.decode(gbkBuffer, 'gbk'); console.log(utf8Text); // 输出:中文内容
总结
jQuery GBK乱码问题是由于GBK编码与JavaScript编码不一致所导致的。为了正确处理GBK编码的文本,可以使用encodeURIComponent
和decodeURIComponent
函数进行手动编码转换,或者使用外部库来处理编码转换。通过以上方法,可以有效解决jQuery GBK乱码问题。
感谢您阅读本文,希望对解决jQuery GBK乱码问题有所帮助。
三、为什么改了gbk还是乱码?
我们知道在计算机内存中,存储的是二进制数据,在网络传输中,也是二进制数据,但最终呈现给用户的是字符串,二进制与字符串的转化就需要编码、解码的参与,如果世界上只有一种字符编码方式,就不会有乱码这一说了,但事实是,编码的方式太多了,utf-8、utf-32、utf-16、gbk、gb2312、iso-8859-1、big5、unicode等等。由于每个编码的规则不一样,一般都不能用一种进行编码,用另一种进行解码。如utf-8中,一个字母用一个字节表示,一个汉字用三个字节表示,特殊的汉字用四个字节表示,而gbk中,一个字母用一个字节表示,一个汉字用两个字节表示。
有一个说法,内存中存储的二进制是unicode码,如果内存中的数据需要存储或传输时,才会进行一次转化,将unicode码转化成其它的编码二进制(有待考证)。个人觉得这种方式很合理,毕竟unicode码中每个字符都有独一无二的二进制与之对应。
排查乱码问题,难度在于是在哪个环节出了问题,但乱码的本质都是一样的,读取二进制的编码和最初将字符串转化成二进制的编码方式不一致。
此处说明一个概念,编码指将字符串转化成二进制,解码指将二进制转化成字符串。
UTF-8编码,GBK解码
在这我们讨论一下,gbk和utf-8互转的乱码问题,直接上代码。
package com.anjz.test;
import java.io.UnsupportedEncodingException;
public class CodingTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "你好,世界";
System.out.println("字符串长度:"+str.length());
byte[] utfBytes = str.getBytes("utf-8");
System.out.println("utf-8需要"+utfBytes.length+"字节存储");
byte[] gbkBytes = str.getBytes("gbk");
System.out.println("gbk需要"+gbkBytes.length+"字节存储");
}
}
以上代码运行打印出一下内容:
字符串长度:5
utf-8需要15字节存储
gbk需要10字节存储
可以看出,utf-8存储一个汉字,需要3个字节,gbk存储一个汉字,需要2个字节。
现用单个字符测试。
package com.anjz.test;
import java.io.UnsupportedEncodingException;
public class CodingTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "你";
byte[] utfBytes = str.getBytes("utf-8");
for(byte utfByte:utfBytes){
//字节对应的十进制是负数,因java中的二进制使用补码表示的,此处使用0xff 还原成int表示的数据,再转化成16进制
System.out.print(Integer.toHexString((utfByte & 0xFF)) +",");
}
System.out.println();
String utf2gbkStr = new String(str.getBytes("utf-8"),"gbk");
System.out.println("utf-8转化成gbk:"+utf2gbkStr);
byte[] gbkBytes = utf2gbkStr.getBytes("gbk");
for(byte gbkByte:gbkBytes){
System.out.print(Integer.toHexString((gbkByte & 0xFF))+",");
}
System.out.println();
String gbk2utfStr = new String(utf2gbkStr.getBytes("gbk"),"utf-8");
System.out.println("gbk转化成utf-8:"+gbk2utfStr);
}
}
运行上面代码,得出的结果:
e4,bd,a0,
utf-8转化成gbk:浣�
e4,bd,3f,
gbk转化成utf-8:�?
用两个字符测试,将上述代码String str = “你”改成String str = “你好”。运行代码,得出的结果:
e4,bd,a0,e5,a5,bd,
utf-8转化成gbk:浣犲ソ
e4,bd,a0,e5,a5,bd,
gbk转化成utf-8:你好
上述实验中,utf-8转化成gbk出现乱码,这个很好理解,但是再还原回去,gbk转化成utf-8,单个中文字符依然是乱码,两个字符却能正常显示,这个到底是怎么回事呢?
经过一番研究,想把这个事说明白,还需要从它们的编码规则着手。
ISO-8859-1
单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
GBK
采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。双字节其编码范围从8140至FEFE(剔除xx7F)。
单字节:00000000 - 01111111
双字节:10000001 01000000 - 11111110 11111110 (剔除******** 01111111)
单字节、双字节的区分通过高字节高位区分,单字节高位为0,双字节的高字节高位为1。
UTF-8
可变长字符编码,是unicode码的具体实现,UTF-8用1到6个字节编码Unicode字符。
UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
明白上述GBK和UTF-8的编码规则,我们再分析一下,单个中文字符是乱码,两个字符却能正常显示的问题。
“你”
UTF-8编码对应的二进制:11100100 10111101 10100000
将上述二进制通过GBK进行解码,根据GBK规则,第一个字节高位为1,使用双字节编码,
“11100100 10111101”解码成“浣”,“10100000”对于GBK来说是非法的,就解码成了一种特殊字符“�”。
看看能不能将“浣�”还原回“你”呢?
GBK编码对应的二进制:11100100 10111101 00111111
看到上述的二进制,根本不符合UTF-8编码规则,故用UTF-8进行解码,是解码成了一些特殊字符“�?”。
对于上述情况可以看出,一个二进制,如果不符合当前的编码规则,会被解码成特殊字符,但此特殊字符再进行编码,是回不到最初的二进制的。
用同样的方式,分析“你好”为什么最终可以正常显示。
UTF-8编码对应的二进制:11100100 10111101 10100000 11100101 10100101 10111101
将上述二进制通过GBK进行编码,根据GBK规则,使用双字节编码,“1100100 10111101”解码成“浣”,“10100000 11100101”解码成“犲”,“10100101 10111101”解码成“ソ”。
看看能不能将“浣犲ソ”还原成“你好”呢?
GBK 编码对应的二进制:11100100 10111101 10100000 11100101 10100101 10111101
可以看出二进制是可以被还原的,将此二进制通过UTF-8解码,肯定能变成“你好”。
可以看出,一个字符串,通过UTF-8进行编码,再通过GBK进行解码,再将得到的字符串进行GBK编码,最后将得到的二进制通过UTF-8解码,能否还原到最初的字符串,在于UTF-8编码后得到的二进制,是否符合GBK的编码规则,如果符合,最终就可以还原,如果不符合,就不可还原。
GBK编码,UTF-8解码
package com.anjz.test;
import java.io.UnsupportedEncodingException;
public class CodingTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "你好";
byte[] gbkBytes = str.getBytes("gbk");
for(byte gbkByte:gbkBytes){
//字节对应的十进制是负数,因java中的二进制使用补码表示的,此处使用0xff 还原成int表示的数据,再转化成16进制
System.out.print(Integer.toHexString((gbkByte & 0xFF)) +",");
}
System.out.println();
String gbk2utfStr = new String(str.getBytes("gbk"),"utf-8");
System.out.println("gbk转化成utf-8:"+gbk2utfStr);
byte[] utfBytes = gbk2utfStr.getBytes("utf-8");
for(byte utfByte:utfBytes){
System.out.print(Integer.toHexString((utfByte & 0xFF))+",");
}
System.out.println();
String utf2gbkStr = new String(gbk2utfStr.getBytes("utf-8"),"gbk");
System.out.println("utf-8转化成gbk:"+utf2gbkStr);
}
}
运行上述代码,结果为:
c4,e3,ba,c3,
gbk转化成utf-8:���
ef,bf,bd,ef,bf,bd,ef,bf,bd,
utf-8转化成gbk:锟斤拷锟�
上述结果应该都在意料之中,我们通过上述的方法分析一下。
“你好”GBK编码的二进制:11000100 11100011 10111010 11000011
GBK编码的二进制数据,完全匹配不了UTF-8的编码规则,最终UTF-8只能按如下方式匹配,查看第一个字节,开头“110”,理论上匹配两个字节,但看下一个字节,开头却不是“10”,最终“11000100”解码成“�”,看第二个字节开头是“1110”,理论匹配三个字节,看下个字节符合,以“10”开头,但下下个字节开头是“110”,不符合匹配,最终“11100011 10111010”解码成“�”,同理“11000011”也解码成“�”,这个符号都是为找不到对应规则随意匹配的一个特殊字符。
“���”UTF-8编码的二进制为:11101111 10111111 10111101 11101111 10111111 10111101 11101111 10111111 10111101
这个二进制和原先的二进制不相同,根本转化不到最初的字符串,按照GBK的编码规则,“11101111 10111111”编码成“锟”,“10111101 11101111” 编码成“斤”,“10111111 10111101”编码成“拷”,“11101111 10111111”编码成“锟”,“10111101”不符合GBK规则,编码成特殊字符“�”。
理论上说,用GBK编码,UTF-8解码的字符串是不能还原到最初的字符串的,因UTF-8编码规则的特殊性,GBK编出的二进制,是很难匹配上的。
总结
理论上说,系统出现乱码,将乱码还原到最初的样子,上述UTF-8编码,GBK解码,这个有时是可以还原的,有时是还原不了的,要看UTF-8编码的二进制是否都能符合GBK的编码规则,但GBK编码,UTF-8解码,这个基本是条不归路。
但实际中,有一种情况,是100%可以将乱码还原成最初的字符串。就是任意编码格式编码,ISO-8859-1解码,这个主要因为ISO-8859-1是单字节编码,而且匹配所有单字节情况,乱码字符串总是可以还原到最初的二
四、服务器安装gbk导向乱码
在构建一个多语言网站时,服务器的编码设置是非常重要的。特别是在服务器安装gbk导向乱码这一问题上,需要特别注意。GBK编码是一种最常用的中文字符编码方式,但在某些情况下,服务器可能会出现乱码的问题。
首先,我们需要确定服务器的默认编码设置。通过以下步骤可以检查服务器的默认编码设置:
- 登录服务器管理面板。
- 找到服务器设置或编码设置选项。
- 查看默认编码设置,确保它为GBK或UTF-8。
如果服务器的默认编码设置不是GBK,那么就需要进行调整。以下是一些调整服务器编码的方法:
方法一:修改服务器配置文件
对于大部分服务器,可以通过修改服务器配置文件来调整默认编码设置。
- 登录服务器。
- 找到服务器配置文件,通常是位于/etc目录下的配置文件,例如/etc/httpd/conf/httpd.conf。
- 打开配置文件并找到 AddDefaultCharset 指令。
- 将指令的值修改为GB2312、GBK或UTF-8,取决于你的需求。
- 保存配置文件并重启服务器。
通过这种方法,你可以轻松地修改服务器的默认编码设置,确保支持GBK编码的页面可以正确显示。
方法二:修改网站代码
如果你无法直接修改服务器配置文件,还可以尝试修改网站的代码来解决乱码问题。
首先,需要确保网站的文档声明使用了正确的编码。在文档声明中添加以下代码:
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
这会告诉浏览器使用GBK编码来解析网页内容。
其次,需要检查网页中是否存在其他导致乱码的因素。例如,数据库中存储的数据是否使用了正确的编码,以及网页中使用的字体是否支持GBK编码。
如果你使用了网站框架或内容管理系统,可以查阅相关文档了解如何调整编码设置。
方法三:使用转码工具
如果以上方法都无法解决问题,还可以考虑使用转码工具来处理乱码问题。
转码工具可以将原来编码错误的网页以正确的编码重新保存,从而解决乱码问题。
有些转码工具可以批量处理多个网页,非常方便快捷。
不过需要注意的是,转码工具可能会破坏原有的网页布局或样式,因此在使用之前最好先备份网页文件。
总结来说,服务器安装gbk导向乱码是一个常见的问题,但通过适当的调整可以轻松解决。无论是修改服务器配置文件、调整网站代码还是使用转码工具,都能帮助我们正确显示支持GBK编码的网页内容。
希望以上方法能对解决服务器安装gbk导向乱码问题有所帮助!
五、jquery请求参数乱码
jQuery请求参数乱码问题解决方法
在前端开发中,使用jQuery进行Ajax请求是非常常见的操作。然而,有时在处理请求参数时会遇到乱码的问题,特别是涉及到中文字符时更容易出现这种情况。本文将介绍如何解决jQuery请求参数乱码问题,帮助开发者顺利处理中文字符传递的情况。
问题背景分析
当我们使用jQuery进行Ajax请求时,通常会通过$.ajax()
或$.get()
、$.post()
等方法来发送请求,同时传递参数给后端服务器。然而,如果参数中包含中文字符或其他特殊字符时,就容易出现乱码问题,导致后端无法正确解析参数,进而影响系统的正常运行。
解决方法
为了解决jQuery请求参数乱码问题,可以通过以下几种方式来进行处理:
-
使用encodeURIComponent():在发送请求之前,对中文参数进行编码处理,可以使用
encodeURIComponent()
函数对参数进行编码,确保传递的参数是经过正确转义的,从而避免乱码问题的发生。 -
设置contentType参数:在
$.ajax()
方法中设置contentType
参数为'application/x-www-form-urlencoded; charset=UTF-8'
,明确告诉服务器发送的数据类型是表单数据,并指定编码格式为UTF-8,这样可以有效避免乱码问题。 - 后端服务器设置编码:在后端服务器接收请求时,确保服务器端也采用UTF-8编码方式解析请求参数,以保持前后端编码一致,避免乱码问题的发生。
示例代码
下面是一个简单的示例代码,演示了如何使用jQuery发送包含中文参数的请求,并避免乱码问题的发生:
$.ajax({
url: 'e.com/api',
method: 'POST',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
data: {
name: encodeURIComponent('张三'),
age: 25
},
success: function(response) {
console.log(response);
}
});
在上述代码中,我们对中文姓名参数使用encodeURIComponent()
进行编码处理,同时设置了contentType
参数为UTF-8,确保数据传递的正确性,最终避免了乱码问题的发生。
结语
通过本文的介绍,相信大家对于如何解决jQuery请求参数乱码问题有了更深入的理解。在实际开发中,遇到乱码问题时可以结合以上解决方法进行处理,提高系统的稳定性和数据传递的准确性。同时,也希望开发者们在日常开发中能够更加注意字符编码的处理,避免出现不必要的问题。
六、PhantomJS抓取gbk页面乱码,有什么方法解决?
决办法就是安装字体用phantomjs去截取中文页面的网站可能会出现乱码的情况,也就是截图中中文的位置全是方框。在centos中执行:yuminstallbitmap-fontsbitmap-fonts-cj
七、PHP接收POST请求的方法及示例
PHP接收POST请求的方法及示例
在web开发中,接收POST请求是常见的操作之一。PHP作为一种流行的后端语言,提供了多种方法来接收POST请求,并对接收到的数据进行处理。本文将介绍PHP接收POST请求的常用方法,并给出相应的示例代码。
一、使用$_POST
全局变量
PHP中,$_POST
是一个关联数组,用于存储通过POST方法传递来的变量。可以通过$_POST['key']
来获取POST请求中key对应的值。以下是一个简单的示例:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$email = $_POST['email'];
// 对接收到的数据进行处理
}
?>
二、使用file_get_contents
函数
除了使用$_POST
外,还可以使用file_get_contents
函数来获取POST请求的原始数据。示例代码如下:
<?php
$postData = file_get_contents('php://input');
// 对$postData进行处理
?>
三、使用$_REQUEST
全局变量
除了$_POST
,$_REQUEST
也是一个包含了GET、POST和COOKIE数据的全局关联数组。示例如下:
<?php
$name = $_REQUEST['name'];
// 对接收到的数据进行处理
?>
总结:
通过本文介绍的方法,你可以灵活地接收和处理POST请求数据。无论是直接通过$_POST
获取特定字段的值,还是通过file_get_contents
函数获取原始数据进行处理,亦或是使用$_REQUEST
来获取数据,都为你提供了不同的选择。
感谢你阅读本文,希望对你理解和应用PHP接收POST请求有所帮助。
八、轻松掌握 JSON POST 请求的接收技巧
在当今的网络编程中,传输数据的方式越来越多样化,其中JSON格式因其简洁和易读性而受到广泛使用。无论是与后台的交互,还是与各种API的对接,掌握JSON POST请求的接收技巧都是非常重要的。让我带你深入了解这个话题。
JSON POST 请求是什么?
POST请求是用来向服务器发送数据的一种HTTP请求方式,而JSON则是一种轻量的数据交换格式。通过JSON POST请求,你可以将数据以一种结构化的方式发送给服务器,服务器可以进一步处理这些数据。
如何接收 JSON POST 请求
在实际项目中,接收JSON POST请求的步骤虽然并不复杂,但需要注意以下几点:
- 选择合适的框架:大多数现代框架(如 Flask、Express 等)都提供了简便的方法来接收POST请求。
- 设置请求头:确保请求头中的 'Content-Type' 设置为 'application/json',以便服务器能够正确处理接收到的数据。
- 解析 JSON 数据:在服务器端解析接收到的JSON数据,使其可以以对象的形式进行处理。
具体示例
以 Node.js 的 Express 框架为例,接收JSON POST请求的代码如下:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用 body-parser 中间件
app.use(bodyParser.json());
app.post('/receive', (req, res) => {
const data = req.body; // 解析 JSON 数据
console.log(data); // 打印接收到的数据
res.send('数据接收成功');
});
app.listen(3000, () => {
console.log('服务器正在运行,监听3000端口');
});
在这个示例中,我们首先导入了Express框架和body-parser中间件,然后通过 app.use(bodyParser.json())
来解析请求体中的JSON数据。在接收到POST请求后,我们可以通过 req.body
获取转化后的数据。
常见问题解答
在接收JSON POST请求的过程中,大家可能会遇到一些问题。以下是我整理的一些常见问题,以及对应的解答:
- 如何确保数据格式正确?在接收之前,可以使用 JSON Schema 来验证数据的格式。
- 服务器超时怎么办?检查网络连接、服务器负载和请求的数据量,必要时可以优化服务器性能。
- 无法解析 JSON 数据?确保请求头设置正确,并且使用了适当的解析中间件。
小贴士与总结
接收JSON POST请求的过程其实并不是那么复杂,只要掌握了基本的方法和注意事项,就能轻松实现数据的交互。后续可以考虑搭建一套完整的API,进一步提高你的开发技能。而且,如果有时间,深入了解各种数据格式和请求方式也是一个不错的选择。
希望这篇文章能对你理解和应用JSON POST请求有所帮助!如果你有其他相关问题,欢迎随时交流讨论。
九、postman如何接收post请求?
在head填入对应参数,然后uri填入接口名字,然后设置post,点击然后看报文里有没有返回200code
十、put请求如何接收参数?
get请求一般是在你请求的地址后边 加上 ?par=''&par2='' 例如 请求的页面是 a.do(假设你后台是java) 那么 请求地址是这样的 a.do?par='123'&par2='456' 这个请求传递的参数 就 par 和par2 他俩的值分别为 123,456


- 相关评论
- 我要评论
-