UTF-8下检测中文用户名 做了个注册界面,可以用中文做用户名。但是检测是否存在用户名出了问题,如果是用英文用户名注册,程序能检测出数据库是否存在相同的用户名。但如果用中文注册,就检测不出来了。求解。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只要编码正确,这样的字符都可以。SELECT * FROM `user` WHERE `login_name` = '○o佑鉺釘ㄨ' 数据库编码utf8-bin页面程序编码:utf-8header("Content-type:text/html;charset=UTF-8");$username=trim($_GET["username"]);$sql="select * from menber where name='$username'";$query=mysql_query($sql);$rst=mysql_fetch_object($query);mysql_close($id);if ($rst==false){echo 'false';}else{echo 'true';} 不是编码的问题。这个判断我是用AJAX+php。现在问题已经出了点眉目,很可能是AJAX出现问题了。在IE6.0中,出现这个问题。在FF中,又没有这样的情况。搞得头很大。看来要重新梳理AJAX。//传输方式xmlhttp.open("GET","user_ck.php?username="+document.getElementById("username").value,true); xmlhttp.open("GET","user_ck.php?username="+encodeURIComponent(document.getElementById("username").value),true);改成这样试试 也许IE上传的时候转码了,你在php端加上urldecode试一下 encodeURIComponenturldecode都不管用我也认为IE传递数据时出了问题。有没有会的啊 前台文件是utf-8吗?相关JS文件是utf-8吗?encodeURIComponent这个是要要的,你在PHP页里,接收到后直接打印出来,ajax得到后再弹出,看下是否是正常的??? JS文件 var xmlhttp = false; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } function Ajax(data){ xmlhttp.open("GET","user_ck.php?username="+document.getElementById("username").value,true);//设置传输方式 xmlhttp.send(null); document.getElementById('username_notice').innerHTML = process_request;//显示状态 xmlhttp.onreadystatechange=function(){ if (4==xmlhttp.readyState){ if (200==xmlhttp.status){ var responseText = xmlhttp.responseText; if (responseText=="true" ){ ck_user("true"); } else{ ck_user("false"); } }else{ alert("发生错误!"); } } } } function chkUserName(obj){ if (checks(obj.value)== false) { obj.className = "FrameDivWarn"; showInfo("username_notice",msg_un_format); change_submit("true"); } else if(obj.value.length<1){ obj.className = "FrameDivWarn"; showInfo("username_notice",msg_un_blank); change_submit("true"); } else if(obj.value.length<3){ obj.className = "FrameDivWarn"; showInfo("username_notice",username_shorter); change_submit("true"); } else{ //调用Ajax函数,向服务器端发送查询 Ajax(obj.value); } } //--------------用户名检测---------------------//function ck_user(result){ if ( result == "true" ) { document.getElementById('username').className = "FrameDivWarn"; showInfo("username_notice",msg_un_registered); change_submit("true");//禁用提交按钮 } else { document.getElementById('username').className = "FrameDivPass"; showInfo("username_notice",msg_can_rg); change_submit("false");//可用提交按钮 }} PHP文件<?phpinclude("conn.php"); //设置页面编码header("Content-type:text/html;charset=utf-8");$username=trim($_GET["username"]);$sql="select * from menber where name='$username'";$query=mysql_query($sql);$rst=mysql_fetch_object($query);mysql_close($id);if ($rst==false){echo 'false';}else{echo 'true';}?> 目前在FF测试没有问题,在IE可以测英文,检测中文时不起作用。encodeURIComponent这个不知道好用不?一用之下,连FF浏览器都不检测中文了。 问题所在:document.getElementById("username").value//encodeURI(document.getElementById("username").value)ajax传过来的是utf-8的,你的数据库如果不是相同的字符集的话需要转码或操作才对 ajax好像不能直接将汉字传过去请用encodeURI()转下 Ajax发送中文、PHP接收这个比较复杂:Ajax中先用encodeURIComponent对要提交的中文进行编码PHP中:$GB2312string=iconv( 'UTF-8', 'gb2312//IGNORE' , $RequestAjaxString);PHP写入MySQL数据库建立conn时,query一下set names "gb2312"在网上找的,先试验一下。看样子AJAX发送中文是比较郁闷。 utf-8转化成gb2312 有可能丢字符哦,建议 还是全部统一起来 你接受的时候://AJAX GET传来的值 解码$kahao=iconv("utf-8","gb2312",urldecode($_GET['kahao']));$leixing=iconv("utf-8","gb2312",urldecode($_GET['leixing']));$qymc=iconv("utf-8","gb2312",urldecode($_GET['qymc']));$gzsj=iconv("utf-8","gb2312",urldecode($_GET['gzsj']));$daiyu=iconv("utf-8","gb2312",urldecode($_GET['daiyu']));$cc=iconv("utf-8","gb2312",urldecode($_GET['cc']));$date=date("Y-m-d H:i:s"); 通过,只需要加对提取的值encodeURIComponent就可以了。其他的解码啊什么的,都是画一条蛇再画上两只腿。发分。 fputcsv 如何强制所有的数据都加双引号 初学者的PHP问题 php中自动下载文件到本地的指定目录中 我的PHP之路 第一天接触PHP,请大家帮忙讲下这段代码的意思 一个函数问题 怎么样实现连续几幅图片上传呀! 求大神指点奇怪的php乱码问题 我靠,真是太不知天高地厚了。 MyRecover0.05 超大数据库文件恢复系统(发布) 点击一个链接触发一个表单提交按钮,怎么写? php菜鸟求教
SELECT * FROM `user` WHERE `login_name` = '○o佑鉺釘ㄨ'
页面程序编码:utf-8
header("Content-type:text/html;charset=UTF-8");
$username=trim($_GET["username"]);$sql="select * from menber where name='$username'";
$query=mysql_query($sql);
$rst=mysql_fetch_object($query);
mysql_close($id);
if ($rst==false)
{
echo 'false';
}
else
{
echo 'true';
}
现在问题已经出了点眉目,很可能是AJAX出现问题了。在IE6.0中,出现这个问题。在FF中,又没有这样的情况。搞得头很大。看来要重新梳理AJAX。
//传输方式
xmlhttp.open("GET","user_ck.php?username="+document.getElementById("username").value,true);
相关JS文件是utf-8吗?encodeURIComponent这个是要要的,你在PHP页里,接收到后直接打印出来,ajax得到后再弹出,看下是否是正常的???
var xmlhttp = false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
function Ajax(data){
xmlhttp.open("GET","user_ck.php?username="+document.getElementById("username").value,true);//设置传输方式
xmlhttp.send(null);
document.getElementById('username_notice').innerHTML = process_request;//显示状态
xmlhttp.onreadystatechange=function(){
if (4==xmlhttp.readyState){
if (200==xmlhttp.status){
var responseText = xmlhttp.responseText;
if (responseText=="true" ){
ck_user("true");
}
else{
ck_user("false");
}
}else{
alert("发生错误!");
}
}
}
}
function chkUserName(obj){
if (checks(obj.value)== false)
{
obj.className = "FrameDivWarn";
showInfo("username_notice",msg_un_format);
change_submit("true");
}
else if(obj.value.length<1){
obj.className = "FrameDivWarn";
showInfo("username_notice",msg_un_blank);
change_submit("true");
} else if(obj.value.length<3){
obj.className = "FrameDivWarn";
showInfo("username_notice",username_shorter);
change_submit("true");
}
else{
//调用Ajax函数,向服务器端发送查询
Ajax(obj.value);
} }
//--------------用户名检测---------------------//
function ck_user(result)
{
if ( result == "true" )
{
document.getElementById('username').className = "FrameDivWarn";
showInfo("username_notice",msg_un_registered);
change_submit("true");//禁用提交按钮
}
else
{
document.getElementById('username').className = "FrameDivPass";
showInfo("username_notice",msg_can_rg);
change_submit("false");//可用提交按钮
}}
//设置页面编码
header("Content-type:text/html;charset=utf-8");$username=trim($_GET["username"]);$sql="select * from menber where name='$username'";
$query=mysql_query($sql);
$rst=mysql_fetch_object($query);
mysql_close($id);
if ($rst==false)
{
echo 'false';
}
else
{
echo 'true';
}?>
ajax传过来的是utf-8的,你的数据库如果不是相同的字符集的话需要转码或操作才对
这个比较复杂:
Ajax中先用encodeURIComponent对要提交的中文进行编码
PHP中:
$GB2312string=iconv( 'UTF-8', 'gb2312//IGNORE' , $RequestAjaxString);PHP写入MySQL数据库
建立conn时,query一下set names "gb2312"
在网上找的,先试验一下。看样子AJAX发送中文是比较郁闷。
://AJAX GET传来的值 解码
$kahao=iconv("utf-8","gb2312",urldecode($_GET['kahao']));
$leixing=iconv("utf-8","gb2312",urldecode($_GET['leixing']));
$qymc=iconv("utf-8","gb2312",urldecode($_GET['qymc']));
$gzsj=iconv("utf-8","gb2312",urldecode($_GET['gzsj']));
$daiyu=iconv("utf-8","gb2312",urldecode($_GET['daiyu']));
$cc=iconv("utf-8","gb2312",urldecode($_GET['cc']));
$date=date("Y-m-d H:i:s");
发分。