作者: admin

  • js html标签转化过滤

    html特殊标签字符转义

    js转化html标签 正则 过滤 危险 特殊 字符

     

    //去掉html标签

    function removeHtmlTab(tab) {
      return tab.replace(/<[^<>]+?>/g,'');//删除所有HTML标签
    }

     

    //只删除a标签

    function delHtmlTag(str){return str.replace(/(<a .+?>)|(<\/a>)/ig,"");}

     

    //过滤掉回车 换行字符 /n /r

    function ClearBr(key) {
      key = key.replace(/<\/?.+?>/g,"");
      key = key.replace(/[\r\n]/g, "");
      return key;
    }

     

     

     

    //普通字符转换成转意符

    function html2Escape(sHtml) {
      return sHtml.replace(/[<>&"]/g,function(c){return {'<':'&lt;','>':'&gt;','&':'&amp;','"':'&quot;'}[c];});
    }

     

    //转意符换成普通字符

    function escape2Html(str) {
     var arrEntities={'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'"'};
     return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];});
    }

     

    // &nbsp;转成空格

    function nbsp2Space(str) {
     var arrEntities = {'nbsp' : ' '};
     return str.replace(/&(nbsp);/ig, function(all, t){return arrEntities[t]})
    }

     

    //回车转为br标签

    function return2Br(str) {
     return str.replace(/\r?\n/g,"<br />");
    }

     

    //去除开头结尾换行,并将连续3次以上换行转换成2次换行

    function trimBr(str) {
     str=str.replace(/((\s|&nbsp;)*\r?\n){3,}/g,"\r\n\r\n");//限制最多2次换行
     str=str.replace(/^((\s|&nbsp;)*\r?\n)+/g,'');//清除开头换行
     str=str.replace(/((\s|&nbsp;)*\r?\n)+$/g,'');//清除结尾换行
     return str;
    }

     

    // 将多个连续空格合并成一个空格

    function mergeSpace(str) {
     str=str.replace(/(\s|&nbsp;)+/g,' ');
     return str;
    }

     

     

    //在一段字符串中过滤筛选出图片的src地址

      // var box=/src=\".*\"/ig;
     var str='<img alt="海底总动员2:多莉去哪儿.Finding.Dory.2016" src="http://p1.bqimg.com/2251/d7f488aa4dceb926s.png" /><br /><img alt="海底总动员2:多莉去哪儿.Finding.Dory.2016" src="http://p1.bqimg.com/2251/236f99bdede0d95fs.png" /><br />';
     //console.log(box.exec(str));
    
    
    
     // var str = "this is test string <img src=\"http:www.yanue.net/test.jpg\" width='50' > 123 and the end <img src=\"所有地址也能匹配.jpg\" /> 33! <img src=\"/uploads/attached/image/20120426/20120426225658_92565.png\" alt=\"\" />"
     //匹配图片(g表示匹配所有结果i表示区分大小写)
     var imgReg = /<img.*?(?:>|\/>)/gi;
     //匹配src属性
     var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
     var arr = str.match(imgReg);
     var pic_arr=[];
     //alert('所有已成功匹配图片的数组:'+arr);
     for (var i = 0; i < arr.length; i++) {
     var src = arr[i].match(srcReg);
     //获取图片地址
     if(src[1]){
     alert('已匹配的图片地址'+(i+1)+':'+src[1]);
     pic_arr[i]=src[1];
     }
    
    // if (src[0]) {
    // var t = src[0].replace(/src/i, "href");
    // // alert(t);
    // pic_arr[i]=t
    // }
     }
    
     console.log(pic_arr);

     

     

    //如果输出危险字符就返回true

    function stripscript_prompt(s) {
      var pattern = new RegExp("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]");
      return !!pattern.exec(s);
    }

     

     

    //直接过滤掉、并返回过滤后的字符串

    function stripscript(s) {
     var pattern = new RegExp("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]");
     var rs = "";
     for (var i = 0; i < s.length; i++) {
       rs = rs + s.substr(i, 1).replace(pattern, '');
     }
     return rs;
    }

     

     

    //input监听并判断过滤危险字符,配合上面stripscript_prompt(s)、stripscript_prompt(s)

     //input监听、并且过滤
    function input_listen(ele) {
        $.data(ele[0],'old',ele.val()); //默认为了一个元素设置了一个临时变量并获取当前值
        ele.bind('input propertychange', function() {
          var old= $.data(ele[0],'old'); //获取临时的值
          var newvalue=$(this).val(); //获取到当前值
          if(old !== newvalue){ //当前值和临时值不一样时
             $.data(ele[0],'old',$(this).val()); //将当前值赋值给临时值,让临时值成为最新的,如果值还是一样时什么都不变
          }
          //console.log(old); //如果临时值变化了,虽然old获取到的是临时值,但old还是保持上一个值不变,因为是传递赋值保持着独立性
          //console.log( stripscript(newvalue)+'<---' );
    
    
         if(stripscript_prompt(newvalue)){
           ele.val(stripscript(newvalue));
           console.log(stripscript(newvalue)+'<---危险字符并过滤')
     //管理员帐号验证
    
         }else{
           ele.val(newvalue);
           console.log(newvalue+'<---没危险')
         }
    
       });
     }

     

     

    http://www.cnblogs.com/leejersey/p/4568092.html

     

     

  • php.ini中的session如何设置

    php.ini设置参考项:
    //处理session存取的模式
    session.save_handler = files

    //session档案存放路径
    session.save_path = /tmp

    //session使用cookie的功能,启动: 1
    session.use_cookies = 1

    //session名字
    session.name = PHPSESSID

    //自动启动;0:关;1:开启
    session.auto_start = 0

    //session使用cookie的生存期,以秒为单位
    session.cookie_lifetime = 0

  • php验证码功能

    php_code123

    准备工作:

    1、打开服务器安装目录下的php.ini文件;
          去掉;extension=php_gd.dll或;extension=php_gd2.dll前的“;”;
          重启服务器即可。
    2、确保php支持session模块
    关于:php.ini下的session的配置《php.ini中的session如何设置

    phpinfo();  查看是否开启了session和gd模块

     

    1,下载php代码文件code.php

     

    2,调用

    需要在获取验证码的页面输出
    <?php 
      //开启Session 
      session_start(); 
      //判断是否提交 
      echo $_SESSION["verification"];
    ?> 
    
    <input type="text">
    <img src="code.php" onclick="this.src='code.php?Math.random()'">

     

    3,逻辑代码

    获取到用户输入的验证码和$_SESSION[“verification”]进行对比。

  • ubuntu后台进程管理利器:supervisor

    安装supervisor

    sudo apt-get install supervisor

    然后,给我们自己开发的应用程序编写一个配置文件,让supervisor来管理它。每个进程的配置文件都可以单独分拆,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如,app.conf定义了一个gunicorn的进程:

    [program:app]
    command=/usr/bin/gunicorn -w 1 wsgiapp:application
    directory=/srv/www
    user=www-data

    其中,进程app定义在[program:app]中,command是命令,directory是进程的当前目录,user是进程运行的用户身份。

    重启supervisor,让配置文件生效,然后运行命令supervisorctl启动进程:

    # supervisorctl start app

    停止进程:

    # supervisorctl stop app

    如果要在命令行中使用变量,就需要自己先编写一个shell脚本:

    #!/bin/sh
    /usr/bin/gunicorn -w `grep -c ^processor /proc/cpuinfo` wsgiapp:application
    

    然后,加上x权限,再把command指向该shell脚本即可。

    supervisor还有许多选项,默认的autorestart为unexpected(异常退出),具体请参考supervisor文档

     

     

     

     

     

  • express与MongoDB交互

    MongoDB服务器端安装配置好后,就要与客户端交互,例如php操作mongodb、express操作mongodb,等等。

    这里主要介绍express与mongodb交互。假设已经安装好express和node.js,剩下就安装node.js下的mongodb客户端模块。

     

    1,首先安装mongodb客户端

    npm install mongodb

     

    2,安装好mongodb模块后,开始调用,如:

    var MongoClient = require('mongodb').MongoClient;
    var DB_CONN_STR = 'mongodb://xgllseo:123@localhost:27017/xgllseo';  //开启auth时使用,就是不需要帐号密码
    mongodb://帐号:密码@IP地址:端口/数据库
    
    var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';  //如果没设置密码就使用

    现在已经可以使用express操作mongodb数据库了

     

    MongoClient.connect(DB_CONN_STR, function(err1, db) {
      if(err1){
           console.log('连接数据库失败');
      }else{
           db.collection('xx22').insert([{"name":'wilson001',"age":21}],function (err2, result) {
              if(err2){
                  console.log('插入数据失败');
              }else{
                  console.log(result); //显示插入成功后的数据
                  db.close();
              }
           });
      }
    });

     

    //查找到{"name":'wilson002'}数据后,就删除此条数据
    MongoClient.connect(DB_CONN_STR, function(err1, db) {
       if(err1){
           console.log('连接数据库失败');
       }else{
           db.collection('xx').remove({"name":'wilson002'},function (err2,result) {
               if(err2){
                    console.log('删除数据失败');
               }else{
                    console.log('删除数据成功');
               }
           });
        }
    });

     

    //先查找{"name":'wilson001'}有没有数据,如果有就修改数据为{ "name" : "修改后" }
    MongoClient.connect(DB_CONN_STR, function(err1, db) {
       if(err1){
           console.log('连接数据库失败');
       }else{
           db.collection('xx').update({"name":'wilson001'},{$set:{ "name" : "修改后" }},function (err2, result) {
              if(err2){
    
              }else{
                 console.log(result)
              }
           });
       }
    });

     

    //在xx集合中查找age=22的那条数据
    MongoClient.connect(DB_CONN_STR, function(err1, db) {
       if(err1){
          console.log('连接数据库失败');
       }else{
          db.collection('xx').find({age:22}).toArray(function (err2,result) {
             if(err2){
                console.log('插入数据失败');
             }else{
                console.log(result);
             }
          });
        }
    });

     

    可直接执行mongodb语句(这里要注意操作数据库的所拥有的权限)

    MongoClient.connect(DB_CONN_STR, function(err1, db) {
       if(err1){
          console.log('连接数据库失败');
       }else{
          /*-----------------------id自动递增函数---------------------------------*/
            // 要使用此功能时,要添加一个额外的集合,如下
            // db.createCollection("counters")
            // db.counters.insert({_id:"productid",sequence_value:0})
            var str=undefined;
            str=function() {
                  function getNextSequenceValue(sequenceName){
                    var sequenceDocument = db.counters.findAndModify(
                          {
                            query:{_id: sequenceName },
                            update: {$inc:{sequence_value:1}},
                            new:true
                    });
                    return sequenceDocument.sequence_value;
                   }
                   db.xx22.insert({
                      "_id":getNextSequenceValue("productid"),
                      "product_name":"内容111",
                      "category":"内容222"
                   })
             }+'';
          /*--------------------------------------------------------*/
         db.eval(str,function (err2,result) {
             if(err2){
                 console.log('失败');
             }else{
                 console.log('成功');
              }
         })
      }
    });
    
    
    提示:如果要拥有执行eval的权限,就不要设置密码,要么就执行以下步骤:
    在未开启密码验证的时候登录mongo界面,执行以下代码:
    use admin 
    db.createUser({user:"root",pwd:"187", roles:[{role:"root",db:"admin"}]})
    db.createRole({role:'sysadmin',roles:[],privileges:[{resource:{anyResource:true},actions:['anyAction']}]}) 
    
    use xgllseo
    db.createUser({user:'xgllseo',pwd:'123',roles:[{role:'sysadmin',db:'admin'}]}) 
    之后开启auth验证
    登录数据库xgllseo就拥有执行eval权限了

     

     

    auto递增(一般配合eval使用)

    mongodb不像mysql其他关系数据库一样,每增加一条数据后就会递增累计加1,以后可以靠id获取数据。

    mongodb想添加这个功能有点麻烦,如果想为哪个集合添加递增的功能,就要为此集合额外创建一个新的专门存储递增的集合。

     

    假如:有一个xx22的集合想为这个集合添加自动递增的功能,首先创建一个新的集合,如:

    1,db.createCollection("集合名")
    2,db.集合名.insert({_id:"productid",sequence_value:0})
    3,
    function getNextSequenceValue(sequenceName){
       var sequenceDocument = db.集合名.findAndModify(
          {
             query:{_id: sequenceName },
             update: {$inc:{sequence_value:1}},
             new:true
           }
        );
       return sequenceDocument.sequence_value;
    }
    4, //测试,不停的往xx22中添加数据,xx22集合的_id就不停的递增加1
    db.xx22.insert({
      "_id":getNextSequenceValue("productid"),
      "product_name":"内容111",
      "category":"内容222"
    })

    (为了一个集合添加递增功能还要额外创建一个新的集合感觉集合有点冗余)

     

    参考:《mongodb笔记的常用操作