ajax如何传中文参数乱码解决办法

 更新时间:2016年11月25日 17:41  点击:1898
由于某种原因ajax默认就是uft-8的编码,那么我们使用一gbk就容易出现乱码的问题,下面我们就来告诉你php ajax乱码的解决方法吧。

传递中文参数,然后修改数据库教程的。

 代码如下 复制代码

<script>
var url="admin/ajaxmodify.php?"+key+"=";
 url+=encodeuricomponent(encodeuricomponent(value));
  xmlhttp.open("get",url,true);
  xmlhttp.send(null);
</script>
参数是中文encodeuricomponent这个方法必须调用两次
*/

function utf8rawurldecode ($source) {
  $decodedstr = "";
  $pos = 0;
  $len = strlen ($source);
  while ($pos < $len) {
  $charat = substr ($source, $pos, 1);
  if ($charat == '%') {
  $pos++;
  $charat = substr ($source, $pos, 1);
  if ($charat == 'u') {
  // we got a unicode character
  $pos++;
  $unicodehexval = substr ($source, $pos, 4);
  $unicode = hexdec ($unicodehexval);
  $entity = "&#". $unicode . ';';
  $decodedstr .= utf8_encode ($entity);
  $pos += 4;
  }
  else {
  // we have an escaped ascii character
  $hexval = substr ($source, $pos, 2);
  $decodedstr .= chr (hexdec ($hexval));
  $pos += 2;
  }
  } else {
  $decodedstr .= $charat;
  $pos++;
  }
  }
  return $decodedstr;
}


/*
注:js中,在使用字符转码的时候,推荐使用 encodeuricomponent() 或者 encodeuri(),而非escape()。原因在于,escape() 只是为 ascii字符 做转换工作,转换成的 %unnnn 这样的码,如果要用更多的字符如 utf-8字符库就一定要用 encodeuricomponent() 或 encodeuri() 转换才可以成 %nn%nn 这的码才可以。

js:encodeuricomponent —— decodeuricomponent;php: rawurlencode —— rawurldecode


*/

我们先来分析下,有验证码发布的流程
1,显示表单
2,显示验证码(条用生成验证码的程序), 将验证码加密后放进 session 或者 cookie
3,用户提交表单
4,核对验证码无误,数据合法后 写入数据库教程完成

用户如果再发布一条,正常情况下,会再次访问表单页面,验证码图片被动 更新, session 和 cookie 也就跟着变了
但是灌水机操作 不一定非要使用表单页面,它可以直接 模拟post 向服务端程序 发送数据;这样验证码程序没有被调用,当然session和cookie存储的加密验证码就是上次的值,也就没有更新,这样以后无限次的通过post直接发送的数据 ,而不考虑验证码,验证码形同虚设!

所以,在核对验证码后 先将 session和cookie的值清空,然后做数据合法性判断,然偶入库!
这样 一个漏洞就被补上了!

 代码如下 复制代码
<?php教程
if ( md5($_post['vcode']) == $_session['vcode']  ) {
    $_session['vcode']='';//这句非常重要
} else {
    exit '验证码不对!';
}
//接下来的处理
......
?>

生成验证码图片的程序

 代码如下 复制代码
<?php
session_start();
......
$v = new authcode();
$vcode = $v->getauthcode();
$_session['vcode'] = md5($vcode );
........
?>

表单页面

 代码如下 复制代码
<form action="save.php" method="post">
......
<input type="text" name="vcode" size="4" /> <img src="vcode.php" alt="看不清请刷新页面" />
</form>


 验证码是怎样被绕过的

本款php 5.3环境配置方法是利用Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置哦,下面来看看安装配置教程哦。

第一步:下载安装的文件
1. mysql:下载地址mysql-5.1.49-win32.msi;
2. apache: 下载地址httpd-2.2.16-win32-x86-openssl-0.9.8o.msi;
3. php5.3.3 下载地址php-5.3.3-win32-vc6-x86注意:一定要下载php-5.3.3-win32-vc6-x86版本
的,不要下载php-5.3.3-nts-win32-vc6-x86版本,更不要下载vc9版本的,因为他是iis服务器安装版本。
第二步:安装文件
1. 在要安装的磁盘建一个文件夹(笔者的做法是在d盘的根目录下创建一个php文件夹d:php)。
2. 安装apache服务器,安装完成后的目录结果是:d:phppache。
3. 把下载的php-5.3.3-win32-vc6-x86解压的d:php目录中,可以把文件夹的名字改短,结果d:phpphp5
4. 安装mysql数据库教程,它的安装和一般情况一样。笔者把他安装在(d:phpmysql)和php同目录。
第三步:配置php5.3.3
1. 配置php5.3.3,打开php安装目录(笔者是d:phpphp5)可以看到目录下有两个这样的文件php.ini- development和php.ini-production,第一个是开发使用的配置文件,第二个是标准的生产环境的配置。
2. 选择php.ini-development复制一份到同目录下,并改名为php.ini使用文本工具打开,查找extension_dir,可以
看到两个,选择on windows:下面的那个并去得前面的分号修改为extension_dir = "d:/php/php5/ext",读者根
据自己的目录结构配置,目的是找到和php.ini同目录下的ext文件夹中的扩展库。
3. 查找extension=php_,去掉extension=php_curl.dll、extension=php_gd2.dll、extension=php_mbstring.dll、
extension=php_mysql.dll、extension=php_mysqli.dll、extension=php_pdo_mysql.dll、extension=php_xmlrpc.dll前面
的分号。查找short_open_tag = off把它修改成short_open_tag = on,让其支持短标签。
4. 复制php5ts.dll文件到windows/system32目录下,只有php-5.3.3-win32-vc6-x86版本中才有php5ts.dll
php-5.3.3-nts-win32-vc6-x86版本是没有的。
第四步:配置apache
1. 打开apache目录下conf目录中的httpd.conf文件,查找#loadmodule,在其末尾处大概是128行的地方
添加:
loadmodule php5_module "d:/php/php5/php5apache2_2.dll"
phpinidir "d:/php/php5"
addtype application/x-httpd-php .php
addtype application/x-httpd-php .htm
addtype application/x-httpd-php .html
目录结构根据用户自己目录配置。
2. 查找directoryindex index.html 将其修改成directoryindex index.php default.php index.html index.htm default.html
default.htm
3. 查找documentroot将其修改为指向你需要放置web文件的文件夹上(笔者在d:/php目录中创建了一个
www文件夹)所以documentroot就是documentroot "d:/php/www",读者可以根据自己配置来修改。
4. 查找<directory将其修改为你自己配置的documentroot的路径(笔者是<directory "d:/php/www">)
第五步:测试php+apache+mysql是否配置成功
1. 打开mysql在mysql中创建一个新数据库和表。(笔者是userinfo数据库和users表就有id和name两个字段)
测试吗?简单就好,呵呵!!
2. 在上面创建的www文件夹中创建一个index.php文件使用editplus或者其他文本工具打开。
3. 写入:


复制代码 代码如下:

 代码如下 复制代码

<?
$db_host = "localhost";
$db_user = "root";
$db_pass = "root";
$db_name = "userinfo";

mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name);

mysql_query("set names gb2312");
$sql = "select * from users";
$result = mysql_query($sql);
while($data=mysql_fetch_array($result)){
echo "------------------------";
echo $data['id']."<br/>";
echo $data['name']."<br/>";
}
mysql_close();
?>

4.启动apache服务器,在浏览器输入http://www.111cn.net回车。
如果看到下图:表示我们大功告成了!祝贺祝贺!

本款php正则日期教程,提供了三种验证用户输入的日期是不是正确的日期格式哦,二种是用正则日期验证,一种是用checkdate来验证。

$days = date("y-m-d");

//方法一正则验证日期

 代码如下 复制代码

$reg="/d{4}-d{2}-d{2}/";
preg_match($reg,$days,$arr);
print_r($arr);


//方法二用cehckdate验证

 代码如下 复制代码
$k = explode('-',$days);
if( checkdate($k[1],$k[2],$k[0])  )
{
 echo $days,'日期合法';
}
else
{
 echo '不是有效的日期';
}

//方法三简单直观正则验证

 代码如下 复制代码
if( ereg("(19|20)[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",$days))
{
 echo $days,'为有效日期';
}
else
{
 echo

'无效日期';
}

/*
关于 checkdate函数

checkdate() 函数验证一个格里高里日期。

如果指定的值合法,则该函数返回 true,否则返回 false。

日期在下列情况下为合法:
month 介于且包括 1 - 12
day 的值在给定的 month 所应该具有的天数范围之内,闰年已经考虑进去了。
year 介于且包括 1 到 32767


验证格式为 月/日/年

本站原创教程,转载注明来源于www.111cn.net/phper/php.html
*/

[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • php生成二维码中文乱码问题解决方法

    最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • phpexcel导出数据身份证后四位0000解决办法

    在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • phpStudy访问速度慢和启动失败的解决办法

    下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • PHP json_encode() 函数详解及中文乱码问题

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式。<&#63;php$arr = array ( 'Name'=>'希亚', 'Age'...2015-11-08
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20