VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1413|回复: 10

ajax,php乱码问题

[复制链接]

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-13 10:00:01 | 显示全部楼层 |阅读模式
我做了一个很小的例子,只提交留言内容,怎么会出现乱码??
那位知道怎么解决,搜了很多,也不管用。

ajax.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript">
function InitAjax()
{
 var ajax=false;
 try {
  ajax = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   ajax = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   ajax = false;
  }
 }
 if (!ajax && typeof XMLHttpRequest!='undefined') {
  ajax = new XMLHttpRequest();
 }
 return ajax;
}

function saveUserInfo()
{
 //获取接受返回信息层
 var msg = document.getElementById("msg");
 //获取表单对象和用户信息值
 var f = document.form1;
 var name = f.name.value;
 var content = f.content.value;
 //接收表单的URL地址
 var url = "save.php";
 //需要POST的值,把每个变量都通过&来联接
 var postStr = "name="+ name +"&content="+ content;
 //实例化Ajax
 var ajax = InitAjax();

 //通过Post方式打开连接
 ajax.open("POST", url, true);
 //定义传输的文件HTTP头信息
 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");
 //发送POST数据

ajax.send(postStr);
 //获取执行状态
 ajax.onreadystatechange = function() {
  //如果执行状态成功,那么就把返回信息写到指定的层里
  if (ajax.readyState == 4 && ajax.status == 200) {
   msg.innerHTML = ajax.responseText;
  }
 }
}

</script>
</head>

<body>
<form id="form1" name="form1">
<div id=msg></div>
  <label>
  <div align="center">
    <input name="name" type="text" id="name" />
  </div>
  </label>
  <p align="center">
    <textarea name="content" rows="8" id="content">
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-10 21:45:02 | 显示全部楼层
提交英文可以,
汉字出错 Data too long for column 'name' at row 1
我已经加上mysql_query("SET NAMES 'GB2312'");
如果 SQL直接改为$sql="insert into gbook(name,content) values('你你你你你','你你你') ";就可以;
从ajax.php传过去汉字就不行。

为什么???
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-13 15:15:01 | 显示全部楼层
将标题和内容 iconv 转换一下编码试一下
回复

使用道具 举报

0

主题

27

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-4-15 20:15:02 | 显示全部楼层
$objResponse = new xajaxResponse('gb2312');

看看这样可以不。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-17 09:15:02 | 显示全部楼层
如果你的数据库编码时拉丁文,char(1)代表单个英文字符,要用这样的编码来存储中文,要占用两个字节.
如果你数据库本省的编码是GB2312或utf8, char(1)表示一个汉字,两个字节.
还有,JavaScript本身是用UTF8编码的.建议你的php文件用UTF8编码.
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-17 16:15:01 | 显示全部楼层
如果用gb2312呢??整个网站大都是用的gb2312
我也加上这句ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");
回复

使用道具 举报

0

主题

27

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-4-18 17:45:01 | 显示全部楼层
取得的数据转码,iconv
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-19 14:00:01 | 显示全部楼层
iconv也试了,问题依旧
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-19 22:30:01 | 显示全部楼层
你送过去的数据是utf-8编码的...
$con = iconv( "utf-8" , "gbk" , $con);
$name = iconv( "utf-8" , "gbk" , $name);

然后再插入数据库,那么就没问题了.ajax发送出去的数据的编码和页面编码无关,因为浏览器内部是用unicode来处理数据的...
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-19 23:15:01 | 显示全部楼层
iconv也试了,问题依旧
?

不可能...

不过你发送数据的javascript有点问题,你应该用encodeURIComponent将字符串编码后再发到服务器.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表