php预防XSS攻击的一些方法整理

 更新时间:2016年11月25日 15:22  点击:2601
现在有很多php开发框架都提供关于防XSS攻击的过滤方法,下面和大家分享一个预防XSS攻击和ajax跨域攻击的函数,摘自某开发框架,相比于仅仅使用内置函数应该还是够强了的吧。

对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlspecialchars,strip_tags这些函数都使用上了也不一定能保证绝对的安全。

那么如何预防 XSS 注入?主要还是需要在用户数据过滤方面得考虑周全,在这里不完全总结下几个 Tips

1. 假定所有的用户输入数据都是“邪恶”的
2. 弱类型的脚本语言必须保证类型和期望的一致
3. 考虑周全的正则表达式
4. strip_tags、htmlspecialchars 这类函数很好用
5. 外部的 Javascript 不一定就是可靠的
6. 引号过滤必须要重点注意
7. 除去不必要的 HTML 注释
8. Exploer 求你放过我吧……

方法一,利用php htmlentities函数

例子

php防止XSS跨站脚本攻击的方法:是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数 。

在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号(“), 不对单引号(‘)做转义.

所以,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).当然,如果需要不转化如何的引号,用htmlspecialchars($string,ENT_NOQUOTES).

另外, 尽量少用htmlentities, 在全部英文的时候htmlentities和htmlspecialchars没有区别,都可以达到目的.但是,中文情况下, htmlentities却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

htmlentities和htmlspecialchars这两个函数对 '之类的字符串支持不好,都不能转化, 所以用htmlentities和htmlspecialchars转化的字符串只能防止XSS攻击,不能防止SQL注入攻击.


所有有打印的语句如echo,print等 在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss,注意中文要写出htmlentities($name,ENT_NOQUOTES,GB2312) 。

方法二,什么也不多说我们给一个函数


例子

 代码如下 复制代码

function xss_clean($data){
 // Fix &entity\n;
 $data=str_replace(array('&','<','>'),array('&','<','>'),$data);
 $data=preg_replace('/(&#*\w+)[\x00-\x20]+;/u','$1;',$data);
 $data=preg_replace('/(&#x*[0-9A-F]+);*/iu','$1;',$data);
 $data=html_entity_decode($data,ENT_COMPAT,'UTF-8');
 // Remove any attribute starting with "on" or xmlns
 $data=preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu','$1>',$data);
 // Remove javascript: and vbscript: protocols
 $data=preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu','$1=$2nojavascript...',$data);
 $data=preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu','$1=$2novbscript...',$data);
 $data=preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u','$1=$2nomozbinding...',$data);
 // Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
 $data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i','$1>',$data);
 $data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i','$1>',$data);
 $data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu','$1>',$data);
 // Remove namespaced elements (we do not need them)
 $data=preg_replace('#</*\w+:\w[^>]*+>#i','',$data);
 // http://www.111cn.net/
 do{// Remove really unwanted tags
  $old_data=$data;
  $data=preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i','',$data);
 }while($old_data!==$data);
 // we are done...
 return $data;
}

XSS攻击又名跨站脚本攻击他就是利用浏览器对于html,css,js的一些特殊进行相关攻击了,下面我来介绍在php中对于xss攻击的防范例子。

 

例子

最简单的方法利用php自带的htmlspecialchars函数 将字符内容转化为html实体

 代码如下 复制代码

 <?php
if (isset($_POST['name'])){
    $str = trim($_POST['name']);  //清理空格
    $str = strip_tags($str);   //过滤html标签
    $str = htmlspecialchars($str);   //将字符内容转化为html实体
    $str = addslashes($str);
    echo $str;
}
?>
<form method="post" action="">
<input name="name" type="text">
<input type="submit" value="提交" >
</form>

例子

对 htmlspecialchars 函数的封装的同时还替换一些己知可能有危险的字符

 代码如下 复制代码

/**
 * 对 htmlspecialchars 函数的封装
 * @param $item
 * @param string $encoding
 * @return array|mixed|string
 */
function clear_xss($item, $encoding='UTF-8') {
    if (is_array($item)) {
        return array_map('clear_xss', $item);
    } else {
        $item = htmlspecialchars($item, ENT_QUOTES, $encoding);

        //www.111cn.net下面是从CI里拿过来的
        $no   = '/%0[0-8bcef]/';
        $item = preg_replace($no, '', $item);
        $no   = '/%1[0-9a-f]/';
        $item = preg_replace($no, '', $item);
        $no   = '/[- -]+/S';
        $item = preg_replace($no, '', $item);
        return $item;
    }
}


这里提供一个过滤非法脚本的函数:

 代码如下 复制代码

function RemoveXSS($val) { 
   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed 
   // this prevents some character re-spacing such as <javascript> 
   // note that you have to handle splits with , , and later since they *are* allowed in some inputs 
   $val = preg_replace('/([-][ - ][- ])/', '', $val); 

   // straight replacements, the user should never need these since they're normal characters 
   // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29> 
   $search = 'abcdefghijklmnopqrstuvwxyz'; 
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
   $search .= '1234567890!@#$%^&*()'; 
   $search .= '~`";:?+/={}[]-_|'\'; 
   for ($i = 0; $i < strlen($search); $i++) { 
      // ;? matches the ;, which is optional 
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars 

      // &#x0040 @ search for the hex values 
      $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ; 
      // @ @ 0{0,7} matches '0' zero to seven times 
      $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ; 
   } 

   // now the only www.111Cn.net remaining whitespace attacks are , , and  
   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); 
   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); 
   $ra = array_merge($ra1, $ra2); 

   $found = true; // keep replacing as long as the previous round replaced something 
   while ($found == true) { 
      $val_before = $val; 
      for ($i = 0; $i < sizeof($ra); $i++) { 
         $pattern = '/'; 
         for ($j = 0; $j < strlen($ra[$i]); $j++) { 
            if ($j > 0) { 
               $pattern .= '('; 
               $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?'; 
               $pattern .= '|(&#0{0,8}([9][10][13]);?)?'; 
               $pattern .= ')?'; 
            } 
            $pattern .= $ra[$i][$j]; 
         } 
         $pattern .= '/i'; 
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag 
         $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags 
         if ($val_before == $val) { 
            // no replacements were made, so exit the loop 
            $found = false; 
         } 
      } 
   } 
}

最后面这个函数主要是用到了国外一些高手写了,对己知危险的函数知道的更多了,所以我们把它全放进去然后进行替换操作了。

还有一点一聚教程小编得提醒你的是有些朋友使用htmlentities()来过滤了,这个函数默认编码为 ISO-8859-1,如果你的非法脚本编码为其它,那么可能无法过滤掉,同时浏览器却可以识别和执行哦,所以得想办法解决呀。

 

大家都知道,运行动态网页,是需要相关的环境支持才行,所以不管你是学习php,还是做php的工作,都必须要安装php运行环境。

运行php的环境很多,windows下有 apache+php+mysql 和 iis+php+mysql,linux下有 apache+php+mysql 。后者别无选择,前者就多了。


我们平时的学习和工作大多还是用的windows系统,当配置环境时,网上一搜,php集成环境一大片。那么使用php集成环境好吗?是应该使用集成环境呢还是一步步亲自安装原生态的好呢?

 

下面以我个人经验分析一下它们的区别。


学习性上:


安装原生版的可以让你学习怎么配置apache+php+mysql 或 iis+php+mysql,这样也能让你更了解它们的工作原理,以至于后期能熟悉的配置出自己所需的个性化环境。集成环境的话,什么都帮你做好了,即使用过很久后,也不太知道底层的工作原理,一旦出现问题,你还是会不知所措。


稳定性上:


我记得刚开始学习php的时候,总觉得安装php环境很难,不是这里没到位就是那里弄错了。然后就百度一下,php集成环境。我用过WampServer和APMServ,刚开始觉得还好,用久了发现总是容易出问题,特别是APMServ,经常遇到mysql无法启动的情况。后来,工作的需要,便学着去安装php原生态的环境,学会了才发现,其实安装很简单,网上一搜,图文教程一大把,所以安装起来并不难,而且一次学习、学会,终生受益,何乐而不为呢?从这以后我就一直在用,从未出现问题过,而且经常会去根据需求改一些配置,现在对一些基本的东西已经非常熟悉了。

所以,我个人之见,如果是满足一时之需的话,比如在别人电脑上为了快捷可以去安装php集成环境,如果是自己学习和工作,那么尽量尝试配置原生版的。

 

网站给机器发重复内容重复注册己经不是什么希事了,我们只要有注册页面或者是评论页面就会有这种问题出现了,下面我找了两个例子大家一起看看。

网站开放注册的时候有一些渣渣就喜欢乱搞我们的网站。使我们站长们 都是蛋疼无比。所以就去百度找了找防止恶意注册。一般都是加验证码。但是会网页的人一般都是在你的要提交的那个页面利用url传参数。在写入数据的文件没有写好 就很容易被利用了! 所以我得出了2个解决方法

例子、

1.在提交的时候获取客户端IP 在IP第二次访问或者第三次提交数据的时候视为恶意提交

2.使用session访问2次或者3次 视为恶意注册

以下是代码:

 代码如下 复制代码

<?php
 $cs = $_SESSION['cs'] = $_SESSION['cs']+1;//每访问一次加1
 $sql = "INSERT INTO ".$DB_PREFIX."user (username,password,nickname,role,photo,email,description) VALUES ('$username','$password','$user_namex','writer','','$name_mailbox','')";
 if($cs < "2"){//页面被反复刷新的时候 不执行代码
 if( mysql_query($sql) == 1){?>
 <script language="javascript" type="text/javascript"> 
location.href='cache.php';
</script>
 <?php }}else{echo "警告别恶意注册!"; } ?>

当然这个办法也不是很好的。但是目前就感觉这个比较好了

例子、

比较高级的办法RSA算法进行加密通讯 .

avascript部分代码(with jQuery)

 代码如下 复制代码

 

    $(document).ready(function(){ 
    //十六进制公钥 
    var rsa_n = "C34E069415AC02FC4EA5F45779B7568506713E9210789D527BB89EE462662A1D0E94285E1A764F111D553ADD7C65673161E69298A8BE2212DF8016787E2F4859CD599516880D79EE5130FC5F8B7F69476938557CD3B8A79A612F1DDACCADAA5B6953ECC4716091E7C5E9F045B28004D33548EC89ED5C6B2C64D6C3697C5B9DD3"; 
         
    $("#submit").click(function(){ 
        setMaxDigits(131); //131 => n的十六进制位数/2+3 
        var key      = new RSAKeyPair("10001", '', rsa_n); //10001 => e的十六进制 
        var password = $("#password").val(); 
        password = encryptedString(key, password); //不支持汉字 
        $("#password").val(password); 
        $("#login").submit(); 
        alert(password); //test 
    }); 
    }); 

 

PHP部分代码

 代码如下 复制代码

 

    /**
     * 公钥加密
     * www.111Cn.net
     * @param string 明文
     * @param string 证书文件(.crt)
     * @return string 密文(base64编码)
     */ 
    function publickey_encodeing($sourcestr, $fileName) 
    { 
        $key_content = file_get_contents($fileName); 
        $pubkeyid    = openssl_get_publickey($key_content); 
         
        if (openssl_public_encrypt($sourcestr, $crypttext, $pubkeyid)) 
        { 
            return base64_encode("".$crypttext); 
        } 
    } 
    /**
     * 私钥解密
     *
     * @param string 密文(二进制格式且base64编码)
     * @param string 密钥文件(.pem / .key)
     * @param string 密文是否来源于JS的RSA加密
     * @return string 明文
     */ 
    function privatekey_decodeing($crypttext, $fileName, $fromjs = FALSE) 
    { 
        $key_content = file_get_contents($fileName); 
        $prikeyid    = openssl_get_privatekey($key_content); 
        $crypttext   = base64_decode($crypttext); 
        $padding = $fromjs ? OPENSSL_NO_PADDING : OPENSSL_PKCS1_PADDING; 
        if (openssl_private_decrypt($crypttext, $sourcestr, $prikeyid, $padding)) 
        { 
            return $fromjs ? rtrim(strrev($sourcestr), "/0") : "".$sourcestr; 
        } 
        return ; 
    } 
    //JS->PHP 测试 
    $txt_en = $_POST['password']; 
    $txt_en = base64_encode(pack("H*", $txt_en)); 
    $file = 'ssl/server.pem'; 
    $txt_de = privatekey_decodeing($txt_en, $file, TRUE); 
    var_dump($txt_de); 
    //PHP->PHP 测试  www.111cn.net
    $data = "汉字:1a2b3c"; 
    $config = Core::getInstance()->config; 
    $file1 = 'ssl/server.crt'; 
    $file2 = 'ssl/server.pem'; 
    $a = publickey_encodeing($data, $file1); 
    $b = privatekey_decodeing($a, $file2); 
    var_dump($b); 

 

其中密钥的获取是关键(其他难点已经被从代码中解决)

下面来给大家分享两个关于php威盾解密的例子,一个是批量解密一个是超级算法的解密都非常的好,大家有举的进入参考。

例子,批量解密

 代码如下 复制代码

<?php
/***********************************
*威盾PHP加密专家解密算法 By:zhrt
*http://www.111cn.Net
*2013.12.31
*把该程序放到网站程序的目录下,即可针对文件所在目录及子目录的文件进行破解,源加密文件被更改名为.bak.php.
***********************************/ 

//decode("Image.class.php");

function explorerdir($dir)
{
 $dp=opendir($dir); //打开目录句柄
 //echo " ".$dir."rn"; //输出目录
 while ($file = readdir($dp)) //遍历目录
 {
    if ($file !='.'&&$file !='..') //如果文件不是当前目录及父目录
    {
  $path=$dir.DIRECTORY_SEPARATOR.$file; //获取路径
  if(is_dir($path)) //如果当前文件为目录
  {
   explorerdir($path);   //递归调用
  }
  else   //如果不是目录
  {

   //echo "-".$path."n"; //输出文件名

  echo decode($path);

  }
    }
 }
 closedir($dp);    //关闭文件名柄

}
explorerdir(".");    //调用当前目录

function decode($filename="")
{

 if(pathinfo($filename, PATHINFO_EXTENSION)!="php" || strpos($filename,".bak.php") || realpath($filename) == __FILE__ ){return;}

 //$filename="intro.class.php";//要解密的文件 

 if(!file_exists($filename))
 {
  exit("file is not exist;");

 }

 $lines = file($filename);//0,1,2行 

 //第一次base64解密
 $content="";
 if(preg_match("/O0O0000O0('.*')/",$lines[1],$y))
 {
  $content=str_replace("O0O0000O0('","",$y[0]);
  $content=str_replace("')","",$content);
  $content=base64_decode($content);
 }
 else
 {
  weidun_log(false,realpath($filename)." is not Encrypted!");
  return false;

 }
 //第一次base64解密后的内容中查找密钥
 $decode_key="";
 if(preg_match("/),'.*',/",$content,$k))
 {
  $decode_key=str_replace("),'","",$k[0]);
  $decode_key=str_replace("',","",$decode_key);
 }
 //查找要截取字符串长度
 $str_length="";
 if(preg_match("/,d*),/",$content,$k))
 {
  $str_length=str_replace("),","",$k[0]);
  $str_length=str_replace(",","",$str_length);
 }
 //截取文件加密后的密文
 $Secret=substr($lines[2],$str_length);
 //echo $Secret; 

 //直接还原密文输出
 echo "<!-- <?phpn".base64_decode(strtr($Secret,$decode_key,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))."?> -->"; //很奇怪,去掉这行,下面的代码就出现问题,可能跟编码有关,在这里我就暂时不做进一步分析了,注视掉避免界面缭乱。
 //echo "解密中....<br>";
 $filecontent = "<?phpn".base64_decode(strtr($Secret,$decode_key,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))."?>";
 //echo $filecontent;
 $filenamebak = str_replace(".php",".bak.php",$filename);

 if(!file_exists($filenamebak)){

  if(rename($filename,$filenamebak))
  {

   if(!file_exists($filename) && file_exists($filenamebak))//文件被更改成功
   {

    $fp = fopen($filename,"w");
    fwrite($fp,$filecontent);
    fclose($fp);

   }

  }

 }else{

     //return("备份文件".$filenamebak."已存在,停止解密。");
  weidun_log(false,realpath($filenamebak)." is exist!");
  return false;

 }
  weidun_log(true,realpath($filename)." - successful!");
 return $filename." - successful! n";

}

function weidun_log($s = true,$c ="")
{

 if($s)
 {
  $fp = fopen("./log.txt","a+");
  fwrite($fp,$c."n");
  fclose($fp);
 }
 else
 {
  $fp = fopen("./log_error.txt","a+");
  fwrite($fp,$c."n");
  fclose($fp);
 }

}
?>

例子,一个强人的加密做法

 代码如下 复制代码

<?php
function pass($str){
 Return  htmlspecialchars(base64_decode(strtr($str, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));
 }
echo  nl2br(pass('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W1WICoiIRMnpcoEIWaHICoivfoaSUBOIRtieT1aKatiIc29vcoEVColLCtLqW09aTlWPCo1lcol1dBEVColLCtLQHt41hU8PW09aTlWPCofvd2OIRMnpcoEph0YNaA5AhonscBOpfB1IRMnpcoEph0YNaA5AhonJCBOIRMnpcoEphUPxHeEIWaHICuYifolzcMyjfolvdMEIOlkNTUnIGZO0DolzRT50CBkScbnZcb1Pd3OldoEICoiIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1jd21scB50CtnIc29vcoEIT04ICoiIRMnpcoE9Cofvd2OIRMnPd3OldrlLCtnnTLWICofvd2OIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIc29vcoEVColzcoaSCe0XwryKOtnIc29vcoEVCuYjd3klCe0m5DB96h+rkZnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9C29sdBaVfoEICo1lcol1dBEIT04ICoiIRMnpcoE9Co1lcol1dBEVCoivfoaSUBOIwryKOtnIdBaLDbasCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICo1lcol1dBEVColzcoaSCe0XwryKOtnIdBaLDbasCt5IF2YvFMaINUgLVh3Pq4WmwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1jd21scB50CtnICMyLCtnNTJnIDoEVColLCe1ICMyLCt5IDo90cBxkcoEIWA5rwonJCBOIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnICMyLCt5IDbYLcBxINTEIWA5rwonJCBOIRMnzC29ZcBE9k+B3qVJvitFIa0iyALAICoiIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIDoEVColzcoaSCe0XwrfUT1aWwrkcwonPCt5IDBOIhUnIF2EIT04ICoiIRMnpcoE9CuYIRMnPd3OldrlLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9Foivfo9Iwonjd2EIT04ICoiIRMnjd3clFME9CoYvCt5IDBOIwryKOtnIC29IRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIC29IRMnpF2OldoE9HtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9Foivfo9IwonXCtnNTJnIDoEVColLCe1IFoEVCoYifoamd3k5AMaSUBOIwryKOtnIFoEVCoYifoamd3k5TMyscBE9k2ivfoaSkZnnTLWICunIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIFoEVColzcoaSCe0XwyfwOakywonPCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICoiIRMnpF2OldoE9HtnnTLWICoxIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIdoEVColzcoaSCe0XwryKOtnICBEVCuY0CbO1F2E9k+B3SVBVPGDIVtFIWA5rwoniCt5IDbYLcBxINTEIWA5rwonjfoEVCuY0CbO1F2E9k+B3SVBVPGDIVtFIWA5rwonjfoEVColzcoaSCe0XwryKOtnIFucIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIFucIRMnpF2OldoE9HtnnTLWICoiIRMnpcoE9kolLwrfUT1aWwrkcwonPCt5IDBOIwJL7eWp9eWpXfBkSDBHIcmaVC3Opd24Ic2a0TolzftILf2ilFMASko9ZcoaZWmLSkolzWaYewe0IaykaOUXLDB5LcbIINUExRtOzDbplwe0IHtLIGX0hkuY0Cbk0we0IhtOpdMOlGtEsHULIhJELF2l6cTSYtJOzFBXINUEJA0aHOAYAwonPd3OldoEVhJxIcMy2d3kpfoaIRMnJd29qTmasCtxIFukpC2aIRMnXFMljcBESCoYifoamd3k5CtnoAL9YwtiTOAxyW1WICoiIRJPSCoYvCt5IdMyscBEIWaHICoYvfMaZTMyscBESCoxIRMnVCB1lCtnnAZnIdoa2cBxKCB1lCtxIdoEVCunpC3O1FMaIwryTwonScbcldynpC3O1FMaIRonSCt5IcolzFoxiGA9ZcoaZCtnnAZnIdoa2cBxNFMOlFMESCoyIRMnVCB1lCtnnAZnICbklCA5idBaIRonjfoEVCo5idBaIwryTwonjDbO5TMyscBESCun2Ct5IdMyscBEIWaHICunZd3cpdMYlTMyscBESCoxsCt5IdMyscBEIWaHICoxidMOsCbkqTMyscBESwonSdBEVCoYifoamd3k5CtnnAZnIdoyVco1iFMsjCbOlc29ZGBEIRonzCBEVCo5idBaIwryTwonzDo9XCbklCA5idBaIRrloTlaHTtiIC2EVCoYvdB1ldmOKfB1IReEpwryTwonjd21scB50TmasCtxeOAlHUA5uhrloTlaHTtiIF2EVCuYifolzcMyjfolvdMESHTEXhULIWaHICuYifolzcMyjfolvdMESW09aTlWPCunIRMnpcoEpwryTwonXDo90d051dBESCoYifoamd3k5CtnoAL9Ywon7kuOPDbHsNmOiCMxlFuklgBivfoaSCtnIDoEITraoatnhT0lKwon7kuOPDbHsNmOiCMxlFuklgBxlfMaSCtnIdoEIT04ICoiIRMnScbcldrlLCe1IdoEVColLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9CbklCBEICoyIwr9KwonPCt5ICbklCAlLCe1ICBEVColLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9C2l0GBEICoY0CtnNTJnICBEVCoYpfulkcoE9CoY0Ct5IDBOIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1XFM92DB5jcBEICun2CtnNTJnIC3OIRMnXFM92DB5jcAlLCe1IFucIRMnpcoEITraoatnhT0lKwon7kuOPDbHsNmOiCMxlFuklgBxidMOsCbkqCtnIdo1Iwr9KwonPCt5IdoyVco1iFMskcoE9CoxsCt5IDBOIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1zDo9XCbklCBEICuYiCtnNTJnIDoEVCuYPd3niFMaiUBOINBnzCBEVColLCtnHOAcAwrpNUA4IhyYyTraeatnIDoEVColLCtnnAZnIDo90cBxkcoESW09aTlWPCoYIRMnpcoEpwryTwonjd21scB50TmasCtnoAL9Ywon7kuOPDbHsNmOiCMxlFuklgBYvdB1ldmOIwonjCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9Do90cBxIwonPCtnNTJnIC2EVCoivfoaSUBOINBnPCt5IDBOIwyfwOakywonjCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICoYIRMnpF2OldoE9HtnuAL9aAtntBUnIDoEVColLCtLICoYIwr9KwonPCt5IDBOINBnjCt5IDo90cBxkcoEITraoatnhT0lKwtiTOAxyW1WICoiIRMnpcoEIWaHICoivfoaSUBOIRtieT1aKatiIc29vcoEVColLCtLqW09aTlWPCo1lcol1dBEVColLCtLQHt41hU8PW09aTlWPCofvd2OIRMnpcoEph0YNaA5AhonscBOpfB1IRMnpcoEph0YNaA5AhonJCBOIRMnpcoEphUPxHeEIWaHICuYifolzcMyjfolvdMEIOlkNTUnIGZO0DolzRT50CBkScbnZcb1Pd3OldoEICoiIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1jd21scB50CtnIc29vcoEIT04ICoiIRMnpcoE9Cofvd2OIRMnPd3OldrlLCtnnTLWICofvd2OIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIc29vcoEVColzcoaSCe0XwryKOtnIc29vcoEVCuYjd3klCe0m5DB96h+rkZnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9C29sdBaVfoEICo1lcol1dBEIT04ICoiIRMnpcoE9Co1lcol1dBEVCoivfoaSUBOIwryKOtnIdBaLDbasCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICo1lcol1dBEVColzcoaSCe0XwryKOtnIdBaLDbasCt5IF2YvFMaINUgLVh3Pq4WmwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1jd21scB50CtnICMyLCtnNTJnIDoEVColLCe1ICMyLCt5IDo90cBxkcoEIWA5rwonJCBOIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnICMyLCt5IDbYLcBxINTEIWA5rwonJCBOIRMnzC29ZcBE9k+B3qVJvitFIa0iyALAICoiIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIDoEVColzcoaSCe0XwrfUT1aWwrkcwonPCt5IDBOIhUnIF2EIT04ICoiIRMnpcoE9CuYIRMnPd3OldrlLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9Foivfo9Iwonjd2EIT04ICoiIRMnjd3clFME9CoYvCt5IDBOIwryKOtnIC29IRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIC29IRMnpF2OldoE9HtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9Foivfo9IwonXCtnNTJnIDoEVColLCe1IFoEVCoYifoamd3k5AMaSUBOIwryKOtnIFoEVCoYifoamd3k5TMyscBE9k2ivfoaSkZnnTLWICunIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIFoEVColzcoaSCe0XwyfwOakywonPCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICoiIRMnpF2OldoE9HtnnTLWICoxIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIdoEVColzcoaSCe0XwryKOtnICBEVCuY0CbO1F2E9k+B3SVBVPGDIVtFIWA5rwoniCt5IDbYLcBxINTEIWA5rwonjfoEVCuY0CbO1F2E9k+B3SVBVPGDIVtFIWA5rwonjfoEVColzcoaSCe0XwryKOtnIFucIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIFucIRMnpF2OldoE9HtnuAL9aAtntBUnIDoEVColLCtLICoivfoaSCtnHOAcAwrpNUA4IhyYyTraeatnIDoEVColLCtxeT1aKatiId2EVColLCtLIWaHICokvd2sKfB1IwrcUT00ICuSLfoipFZ0+foyJdoaXFMa9d3kLcbkgFM9vdBEICo9IwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1Zd29sCtnIFMEIT04ICo9IRMnZd29sUBOINBnZCt5IDBOIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1Pd3OldoEICoiIwr9KwonZCt5IDo90cBxkcoE9CoiIRMnpcoEIa0iyALAICo9IRMnpF2OldoE9HtnnTLWICukIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIFMEVColzcoaSCe0XwryKOtnIDoEVCuY0CbO1F2E9k+B3SVBVPGDIVtFIWA5rwonPCt5IDbYLcBxINTEIUaHITL9Awr5aTrXIO1kNaaEIWlLIColLCtLICocifM9ZDbOlCtnNTJnIDo90cBxIRMnpcoE9CocifM9ZDbOlCt5IDBOIwrxyOlWIUL9kTJEPA0aHOAYAwonPCt5IDBOIRr1kTJiIFoEVCunZDBYlCtLIWaHICunZDBYlCtnoAL9Ywon7kuOPDbHsNmOiCMxlFuklgBivfoaSCtnIDoEITraoatnhT0lKwon7kuOPDbHsNmOiCMxlFuklgbkvd21IwonZCtnNTJnIDoEVColLCe1IFMEVCoivfoaSUBOIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1XFMljca9Zd29sCtnIFoEIT04ICukIRMnpcoE9CunIRMnZd29sUBOIwyfwOakywonPCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICoiIRMnpF2OldoE9HtnnTLWICukIRMnzfoy0fbYINUgls7RlqQuMPRImwryKOtnIFMEVColzcoaSCe0XwryKOtnIFoEVCoOifoaINAOnarAPTL9bhtLpwryKOtnIFoEVColzcoaSCe0XwryKOtnIFoEVCunZDBYlCtnkAZnKT1WITlaHTtnuAL9aAtntBUnIDBOIhUnIFukpC2aIwr9KwonPd3OldoEVColLCe1IFukpC2aIRMnpcoEIwJ4PDbYzcbWPkufPcbklGzn9hUE/wlfwOakywtO3DoaZcUEJKJEmkZLVwL9UOraUwrkcwoELd3kLcbktGBEIwJ4PkolzWaYewe8JWaYewjPIwLOyA0HJhU4PkuYpGMAINjEINZwITrlYUaWIkuY0Cbk0RtOzDbplwjPIkZFpKX0hFMa0fbkVwtO0DolzRT5LCJ0+cMa0C2igCBxShtOzFBXpKX0hgW0hFuaJdoljwoc1dMY0DB9VwoflfrYvfB50htO3DoaZcUE9wtFmhUn7eWPLC291dmWINUELfoipFZ0+cowsNmklF3aSfy9MDbkzftIJA0aHOAYAwrYNaA5AhtPpwrcUT00IhyYyTraeatnIDoEVhJxIC29IRMnVCB1lCtnnAZnIC292cbkKCB1lCtxIdoEVCo5idBaIwryTwonScbcldr5idBaIRonSCt5IFoljfuaZcBEIWaHICoxlfMaSAoljfuaZcBESCoyIRMnVCB1lCtnnAZnICbklCA5idBaIRonjfoEVCo5idBaIwryTwonjDbO5TMyscBESCun2Ct5IdMyscBEIWaHICunZd3cpdMYlTMyscBESCoxsCt5IdMyscBEIWaHICoxidMOsCbkqTMyscBESwonSdBEVCoYifoamd3k5CtnnAZnIdoyVco1iFMsjCbOlc29ZGBEIRonzCBEVCo5idBaIwryTwonzDo9XCbklCA5idBaIRrloTlaHTtiIC2EVCoYvdB1ldmOKfB1IReEpwryTwonjd21scB50TmasCtxeOAlHUA5uhrloTlaHTtiIF2EVCuYifolzcMyjfolvdMESHTEXhULIWaHICuYifolzcMyjfolvdMESW09aTlWPCunIRMnpcoEpwryTwonXDo90d051dBESCoYifoamd3k5CtnoAL9Ywon7kuOPDbHsNmOiCMxlFuklgBivfoaSCtnIDoEITraoatnhT0lKwon7kuOPDbHsNmOiCMxlFuklgBxlfMaSCtnIdoEIT04ICoiIRMnScbcldrlLCe1IdoEVColLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9CbklCBEICoyIwr9KwonPCt5ICbklCAlLCe1ICBEVColLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9C2l0GBEICoY0CtnNTJnICBEVCoYpfulkcoE9CoY0Ct5IDBOIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1XFM92DB5jcBEICun2CtnNTJnIC3OIRMnXFM92DB5jcAlLCe1IFucIRMnpcoEITraoatnhT0lKwon7kuOPDbHsNmOiCMxlFuklgBxidMOsCbkqCtnIdo1Iwr9KwonPCt5IdoyVco1iFMskcoE9CoxsCt5IDBOIwrxyOlWIUL9kTJnIGZO0DolzRT50CBkScbnZcb1zDo9XCbklCBEICuYiCtnNTJnIDoEVCuYPd3niFMaiUBOINBnzCBEVColLCtnHOAcAwrpNUA4IhyYyTraeatnIDoEVColLCtnnAZnIDo90cBxkcoESW09aTlWPCoYIRMnpcoEpwryTwonjd21scB50TmasCtnoAL9Ywon7kuOPDbHsNmOiCMxlFuklgBYvdB1ldmOIwonjCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaXFMa9Do90cBxIwonPCtnNTJnIC2EVCoivfoaSUBOINBnPCt5IDBOIwyfwOakywonjCt5IF3OifuazCe0m5dGZ5D6i5Qt4kZnnTLWICoYIRMnpF2OldoE9HtnuAL9aAtntBUnIDoEVColLCtLICoYIwr9KwonPCt5IDBOINBnjCt5IDo90cBxkcoEITraoatnhT0lKwtiTOAxyW1WICoiIRMnpcoEIWaHICoivfoaSUBOIRtieT1aKatiIc29vcoEVColLCtLqW09aTlWPCo1lcol1dBEVColLCtLQHt41hU8P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fMaSCtnbUraUOUnIDbYLcBxINTEIWA5rwonzfoy0fbYINUgls7RlqQuMPRImwr9UOraUwrkcwonLDbYXdoy5T3kLcbkIwrOyA0HJhTSYtm0Ytmn1CMxpCZnMfB5jfolvdJnmcbOTDo9XWbklCUIpwuSYtmklfuaZdJELfoipFZ0+cowsNMclfoYPb2ySdtIJA0aHOAYAwonpcoESCo5idBaIwrcUT00ICuSLfoipFZ0+foyJdoaXFMa9F2ivFoyZcByIwyfwOakywonpF2OldoE9HtnnTLWICuY0CbO1F2E9k+B3SVBVPGDIVtFIT1krOawIWlLICoOpF3nSCblNFMOlFMEIWaYewJL7eWp9eWpXfBkSDBHIcmaVC3Opd24Ic2a0TMaiFLk5htOPd3OldrlLRtOVfB0pwuSYtmklfuaZdJELfoipFZ0+cowsNMclfoYPb2ySdtIJA0aHOAYAwonPd3OldoEVhJxIcMy2d3kpfoaIRMnJd29qTmasCtxIFukpC2aIRMnXFMljcBESCoYifoamd3k5CtnoAL9YwtiTOAxyW1WICoiIRJPSCoYvCt5IdMyscBEIWaHICoYvfMaZTMyscBESCoxIRMnVCB1lCtnnAZnIdoa2cBxKCB1lCtxIdoEVCunpC3O1FMaIwryTwonScbcldynpC3O1FMaIRonSCt5IcolzFoxiGA9ZcoaZCtnnAZnIdoa2cBxNFMOlFMESCoyIRMnVCB1lCtnnAZnICbklCA5idBaIRonSdBEVCo5idBaIwryTwonSCB5LdByZD05idBaIRonzCBEVCo5idBaIwryTwonzDo9XCbklCA5idBaIRrloTlaHTtiIC2EVCoYvdB1ldmOKfB1IReEpwryTwonjd21scB50TmasCtxeOAlHUA5uhrloTlaHTtiIF2EVCuYifolzcMyjfolvdMESHTEXhULIWaHICuYifolzcMyjfolvdMESW09aTlWPCunIRMnpcoEpwryTwonXDo90d051dBESCoYifoamd3k5CtnoAL9Ywon7kuOPDbHsNmOiCMxlFuklgBivfoaSCtnIDoEITraoatnhT0lKwon7kuOPDbHsNmOiCMxlFuklgBxlfMaSCtnIdoEIT04ICoiIRMnScbcldrlLCe1IdoEVColLCtnHOAcAwrpNUA4ICuSLfoipFZ0+foyJdoaX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'));

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • Bootstrap Table使用整理(二)

    这篇文章主要介绍了Bootstrap Table使用整理(二)的相关资料,需要的朋友可以参考下...2017-06-15
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!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 ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23