var n=$.trim($("#n").val()); // 中文
var p=$.trim($("#p").val());
var a=$.trim($("#a").val()); // 中文
$.ajax({
type: "POST",
url: 'a1.php',
data: {val:x,n:encodeURL(encodeURL(n)),p:p,a:encodeURL(encodeURL(a))},
success: function(result) {
$("#UserResult").html(result);
}
});
a1.php:
<?php
header("Content-Type:text/html;charset=utf-8");
...
$data1=array("i"=>$x,"n"=> iconv("gb2312","utf-8",urldecode($_POST['n']),"p"=>$_POST['p'], iconv("gb2312","utf-8",urldecode("a"=>$_POST['a']));
$b = $user_record->insert($data1);
试了以下方法都不行,
https://segmentfault.com/a/1190000003020776
http://www.shangxueba.com/jingyan/1918886.html
https://segmentfault.com/a/1190000004013109
http://blog.163.com/yangyan6032@126/blog/static/1218798372011010644180/
http://blog.163.com/yangyan6032@126/blog/static/1218798372011010644180/
https://zhidao.baidu.com/question/307106340656196244.html?qbl=relate_question_3&word=php%20decodeURI
到底该怎么办呢?请不吝赐教!
25 个解决方案
#1
不出意外的话,ajax 提交的数据一定是 utf-8 的
你至多在连接数据库后执行一下 set names utf8 指令,通知 MySQL 将用 utf-8 字符集交换数据
#2
入库之前增加一句
mysql_query("set names utf8");
mysql_query("set names utf8");
#3
谢谢!现在已经加入这句代码了,但是存入数据库的中文还是变成 ?? (不加编码、解码函数) 或 %E9%99%88 (加编码函数encodeURI(encodeURI()) 和解码函数 urldecode() )
#4
看下插入前的编码和数据库的编码一致吗?
#5
所有页面、数据库表 全部都是UTF-8编码的,检查了N遍了,所以才觉得奇怪!
#6
入库之前增加了一句 mysql_query("set names utf8");
那么出库前也要加 mysql_query("set names utf8");
那么出库前也要加 mysql_query("set names utf8");
#7
谢谢!现在select update insert 函数里,前面都加上这句了,
$e = mb_detect_encoding($arr[0]['name'], array('UTF-8', 'GBK'));
echo $arr[0]['name'] . $e;
还是打印出 ?UTF-8
#8
你的 $arr[0]['name'] 在哪里赋值的?
你怎么就知道是 gbk 编码的?
如果真是 gbk 编码的,那么怎么可能在 mysql_query("set names utf8") 之后产生呢?
你怎么就知道是 gbk 编码的?
如果真是 gbk 编码的,那么怎么可能在 mysql_query("set names utf8") 之后产生呢?
#9
我始终觉得应该都是utf-8编码才对,不知道为什么存入数据库会变成乱码,所以我才用尽各种办法瞎折腾一气!
从数据库取出来的中文再回填到数据库,那就不会乱码。
#10
你主贴中的 $data1=array("i"=>$x,"n"=> iconv("gb2312","utf-8",urldecode($_POST['n']),"p"=>$_POST['p'], iconv("gb2312","utf-8",urldecode("a"=>$_POST['a']));
是什么意思?
ajax 总是以 utf-8 编码传送数据,你为何有 iconv("gb2312","utf-8" ... 将传入的数据当成 gbk 的?
是什么意思?
ajax 总是以 utf-8 编码传送数据,你为何有 iconv("gb2312","utf-8" ... 将传入的数据当成 gbk 的?
#11
$data1=array("o"=>$o,"p"=>$x,"name"=>$_POST['nm'],"p"=>$_POST['p'],"a"=>$_POST['a']);
$b = $user_record->insert($data1);
$arr = $user_record->select("o='".$o."' order by id desc","name");
$e = mb_detect_encoding($arr[0]['name'], array('UTF-8', 'GBK'));
#12
你直接 print_r($arr); 打印出 $arr 看看
#13
谢谢回复!这个函数是ajax调用的,没法这么打印的吧? 我打印到日志文件,只有显示 arr 这三个字符!
#14
好可怜哦,调试都不会
php:
file_put_contents('test.txt', print_r($arr, 1));
js:
alert(result)
php:
file_put_contents('test.txt', print_r($arr, 1));
js:
alert(result)
#15
打印的 test.txt 内容:
Array
(
[0] => Array
(
[name] => ?
)
[1] => Array
(
[name] =>
)
[2] => Array
(
[name] =>
)
[3] => Array
(
[name] =>
)
)
#16
那么好了,你从数据库里读出的就是一个问号
那以后再怎么处理也都还是一个问号
你到数据库里去看看对应的是什么
那以后再怎么处理也都还是一个问号
你到数据库里去看看对应的是什么
#17
因为这个表的这个name字段是我新加的,所以之前的记录 name 的值是空串!
#18
谢谢!数据库里看就是两个问号啊!还要看什么呢?
#19
数据库里看到的就是问号?
那就是你插入的时候就不对了
先贴出表结构看看
那就是你插入的时候就不对了
先贴出表结构看看
#20
这难题真把我难住了,搞了两天了还没结果,救救我吧!再支支招呗!
#21
#22
我要看到细节(包括建表指令)
你的字符集选的不对!
你的字符集选的不对!
#23
谢谢!但我不知道建表指令在哪里看,这个数据表之前就已经建好了的,我接手别人的工作。是从一个SQL文件导入数据库的。
。。。晕啊,它原来的编码是latin1 后来我建了个新的UTF-8表,把它导进来。然后新建了name字段。
CREATE TABLE `r` (
...
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
#24
这样的话,代码该怎么写才能使存入数据库的中文不乱码呢?
数据表原来latin1,现在utf-8 。。。 我都被转晕了!
数据表原来latin1,现在utf-8 。。。 我都被转晕了!
#25
把ENGINE=InnoDB DEFAULT CHARSET=latin1;改为ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
重新导入数据库,O了,谢谢大家,谢谢斑竹!
重新导入数据库,O了,谢谢大家,谢谢斑竹!
#1
不出意外的话,ajax 提交的数据一定是 utf-8 的
你至多在连接数据库后执行一下 set names utf8 指令,通知 MySQL 将用 utf-8 字符集交换数据
#2
入库之前增加一句
mysql_query("set names utf8");
mysql_query("set names utf8");
#3
谢谢!现在已经加入这句代码了,但是存入数据库的中文还是变成 ?? (不加编码、解码函数) 或 %E9%99%88 (加编码函数encodeURI(encodeURI()) 和解码函数 urldecode() )
#4
看下插入前的编码和数据库的编码一致吗?
#5
所有页面、数据库表 全部都是UTF-8编码的,检查了N遍了,所以才觉得奇怪!
#6
入库之前增加了一句 mysql_query("set names utf8");
那么出库前也要加 mysql_query("set names utf8");
那么出库前也要加 mysql_query("set names utf8");
#7
谢谢!现在select update insert 函数里,前面都加上这句了,
$e = mb_detect_encoding($arr[0]['name'], array('UTF-8', 'GBK'));
echo $arr[0]['name'] . $e;
还是打印出 ?UTF-8
#8
你的 $arr[0]['name'] 在哪里赋值的?
你怎么就知道是 gbk 编码的?
如果真是 gbk 编码的,那么怎么可能在 mysql_query("set names utf8") 之后产生呢?
你怎么就知道是 gbk 编码的?
如果真是 gbk 编码的,那么怎么可能在 mysql_query("set names utf8") 之后产生呢?
#9
我始终觉得应该都是utf-8编码才对,不知道为什么存入数据库会变成乱码,所以我才用尽各种办法瞎折腾一气!
从数据库取出来的中文再回填到数据库,那就不会乱码。
#10
你主贴中的 $data1=array("i"=>$x,"n"=> iconv("gb2312","utf-8",urldecode($_POST['n']),"p"=>$_POST['p'], iconv("gb2312","utf-8",urldecode("a"=>$_POST['a']));
是什么意思?
ajax 总是以 utf-8 编码传送数据,你为何有 iconv("gb2312","utf-8" ... 将传入的数据当成 gbk 的?
是什么意思?
ajax 总是以 utf-8 编码传送数据,你为何有 iconv("gb2312","utf-8" ... 将传入的数据当成 gbk 的?
#11
$data1=array("o"=>$o,"p"=>$x,"name"=>$_POST['nm'],"p"=>$_POST['p'],"a"=>$_POST['a']);
$b = $user_record->insert($data1);
$arr = $user_record->select("o='".$o."' order by id desc","name");
$e = mb_detect_encoding($arr[0]['name'], array('UTF-8', 'GBK'));
#12
你直接 print_r($arr); 打印出 $arr 看看
#13
谢谢回复!这个函数是ajax调用的,没法这么打印的吧? 我打印到日志文件,只有显示 arr 这三个字符!
#14
好可怜哦,调试都不会
php:
file_put_contents('test.txt', print_r($arr, 1));
js:
alert(result)
php:
file_put_contents('test.txt', print_r($arr, 1));
js:
alert(result)
#15
打印的 test.txt 内容:
Array
(
[0] => Array
(
[name] => ?
)
[1] => Array
(
[name] =>
)
[2] => Array
(
[name] =>
)
[3] => Array
(
[name] =>
)
)
#16
那么好了,你从数据库里读出的就是一个问号
那以后再怎么处理也都还是一个问号
你到数据库里去看看对应的是什么
那以后再怎么处理也都还是一个问号
你到数据库里去看看对应的是什么
#17
因为这个表的这个name字段是我新加的,所以之前的记录 name 的值是空串!
#18
谢谢!数据库里看就是两个问号啊!还要看什么呢?
#19
数据库里看到的就是问号?
那就是你插入的时候就不对了
先贴出表结构看看
那就是你插入的时候就不对了
先贴出表结构看看
#20
这难题真把我难住了,搞了两天了还没结果,救救我吧!再支支招呗!
#21
#22
我要看到细节(包括建表指令)
你的字符集选的不对!
你的字符集选的不对!
#23
谢谢!但我不知道建表指令在哪里看,这个数据表之前就已经建好了的,我接手别人的工作。是从一个SQL文件导入数据库的。
。。。晕啊,它原来的编码是latin1 后来我建了个新的UTF-8表,把它导进来。然后新建了name字段。
CREATE TABLE `r` (
...
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
#24
这样的话,代码该怎么写才能使存入数据库的中文不乱码呢?
数据表原来latin1,现在utf-8 。。。 我都被转晕了!
数据表原来latin1,现在utf-8 。。。 我都被转晕了!
#25
把ENGINE=InnoDB DEFAULT CHARSET=latin1;改为ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
重新导入数据库,O了,谢谢大家,谢谢斑竹!
重新导入数据库,O了,谢谢大家,谢谢斑竹!