豹妈妈正在梳理她的幼崽,Jao保护区,博茨瓦纳 (© Suzi Eszterhas/Minden Pictures)

Welcom to 评论 - lizhenqiu blog!

    #1426

    作者:广西南宁市
    如果不执行$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);PDO 只是会将插入的参数使用本地转义之后和SQL模板拼装起来,然后一起发送给Mysql Server。这实际上与使用mysql_real_escape_string()过滤,然后拼装这种做法并没有什么不同。

    要对数据库的安全做出更加全面的考量,以下两种方式任选其一:

    A. 通过添加(php 5.3.6以前版本):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    B. 升级到php 5.3.6 (不用设置PDO::ATTR_EMULATE_PREPARES也可以)
    为了程序移植性和统一安全性,建议使用$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false)方法
    #,广西南宁市,2017-05-20,17:33:40,
    $dbh = new PDO("mysql:host=localhost; dbname=demo", "user", "pass"); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果 $dbh->exec("set names 'utf8'");
    Run code
    Cut to clipboard

      使用PDO访问MySQL数据库时,真正的real prepared statements 默认情况下是不使用的。为了解决这个问题,你必须禁用 prepared statements的仿真效果。
      当调用 prepare() 时,查询语句已经发送给了数据库服务器,此时只有占位符 ? 发送过去,没有用户提交的数据;当调用到 execute()时,用户提交过来的值才会传送给数据库,他们是分开传送的,两者独立的,SQL攻击者没有一点机会。
      但是我们需要注意的是以下几种情况,PDO并不能帮助你防范SQL注入
      1、你不能让占位符 ? 代替一组值,如:
      SELECT * FROM blog WHERE userid IN ( ? );
      Run code
      Cut to clipboard

        2、你不能让占位符代替数据表名或列名,如:
        SELECT * FROM blog ORDER BY ?;
        Run code
        Cut to clipboard

          3、你不能让占位符 ? 代替任何其他SQL语法,如:
          SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;
          Run code
          Cut to clipboard
            #,广西南宁市,2017-05-20,17:36:19, 使用PDO的注意事项
            知道以上几点之后,我们就可以总结使用PDO杜绝SQL注入的几个注意事项:
            1. php升级到5.3.6+,生产环境强烈建议升级到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞。

            2. 若使用php 5.3.6+, 请在在PDO的DSN中指定charset属性

            3. 如果使用了PHP 5.3.6及以前版本,设置PDO::ATTR_EMULATE_PREPARES参数为false(即由MySQL进行变量处理),php 5.3.6以上版本已经处理了这个问题,无论是使用本地模拟prepare还是调用mysql server的prepare均可。在DSN中指定charset是无效的,同时set names <charset>的执行是必不可少的。

            4. 如果使用了PHP 5.3.6及以前版本, 因Yii框架默认并未设置ATTR_EMULATE_PREPARES的值,请在数据库配置文件中指定emulatePrepare的值为false。

            那么,有个问题,如果在DSN中指定了charset, 是否还需要执行set names <charset>呢?
            是的,不能省。set names <charset>其实有两个作用:
            A. 告诉mysql server, 客户端(PHP程序)提交给它的编码是什么
            B. 告诉mysql server, 客户端需要的结果的编码是什么
            也就是说,如果数据表使用gbk字符集,而PHP程序使用UTF-8编码,我们在执行查询前运行set names utf8, 告诉mysql server正确编码即可,无须在程序中编码转换。这样我们以utf-8编码提交查询到mysql server, 得到的结果也会是utf-8编码。省却了程序中的转换编码问题,不要有疑问,这样做不会产生乱码。

            那么在DSN中指定charset的作用是什么? 只是告诉PDO, 本地驱动转义时使用指定的字符集(并不是设定mysql server通信字符集),设置mysql server通信字符集,还得使用set names <charset>指令。
            #,广西南宁市,2017-05-20,17:40:53,
            $st->execute(); $result = $st->fetchAll();
            Run code
            Cut to clipboard
              execute( )执行预准备语句,fetchAll( )返回包含所有结果集行的数组。
              #,广西南宁市,2017-05-20,17:42:00, PDO如何解决sql注入
              在php5.3.6之后,pdo不会在本地对sql进行拼接然后将拼接后的sql传递给mysql server处理(也就是不会在本地做转义处理)。pdo的处理方法是在prepare函数调用时,将预处理好的sql模板(包含占位符)通过mysql协议传递给mysql server,告诉mysql server模板的结构以及语义。当调用execute时,将两个参数传递给mysql server。由mysql server完成变量的转移处理。将sql模板和变量分两次传递,即解决了sql注入问题。
              #,广西南宁市,2017-05-20,17:50:44, PDO的变量绑定bindParam和bindValue会自动添加转义。

              但无法对表或字段的名字进行变量绑定。

              因此当表名或字段名不确定(即可能从用户输入中获取),而需要动态组装SQL语句时,即使是用了PDO变量绑定来提供字段的值,应当注意表名和字段名部分的过滤。
              #,广西南宁市,2017-05-20,17:50:56, PDO,只是一个手段,并非最合适的方法。
              #,广西南宁市,2017-05-20,17:53:59,
              方法 bindParam() 和 bindValue() 非常相似。
              唯一的区别就是前者使用一个PHP变量绑定参数,而后者使用一个值。
              所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而bindValue至可以使用具体值。
              $stm = $pdo->prepare("select * from users where user = :user"); $user = "jack"; //正确 $stm->bindParam(":user",$user); //错误 //$stm->bindParam(":user","jack"); //正确 $stm->bindValue(":user",$user); //正确 $stm->bindValue(":user","jack");
              Run code
              Cut to clipboard

                另外在存储过程中,bindParam可以绑定为input/output变量,如下面
                $stm = $pdo->prepare("call func(:param1)"); $param1 = "abcd"; $stm->bindParam(":param1",$param1); //正确 $stm->execute();
                Run code
                Cut to clipboard

                  存储过程执行过后的结果可以直接反应到变量上。
                  对于那些内存中的大数据块参数,处于性能的考虑,应优先使用前者bindParam()
                  #,广西南宁市,2017-05-20,17:54:55,@7, 错的。大家去看手册http://www.php.net/manual/zh/pdostatement.bindparam.php
                  #,北京市,2017-05-21,00:03:07, http://zhangxugg-163-com.iteye.com/blog/1835721
                  #,北京市,2017-05-21,11:01:23, 注意二级注入。比如用户把带危险的字符串先存进数据库,如果你想在另外一个 SQL 语句里 concat 或者直接拼接那个带危险的字符串,是可以注入的。
                  #,广西南宁市,2017-05-22,16:31:09, PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
                  PDOStatement::bindParam — 绑定一个参数到指定的变量名。
                  绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。 不同于 PDOStatement::bindValue() ,此变量作为引用被绑定,并只在 PDOStatement::execute() 被调用的时候才取其值。
                  PDOStatement::bindValue — 把一个值绑定到一个参数。
                  绑定一个值到用作预处理的 SQL 语句中的对应命名占位符或问号占位符。
                  <?php $stm = $pdo->prepare("select * from users where user = :user"); $user = "jack"; //正确 $stm->bindParam(":user",$user); //错误 $stm->bindParam(":user","jack"); //正确 $stm->bindValue(":user",$user); //正确 $stm->bindValue(":user","jack"); //所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而bindValue至可以使用具体值。 ?>
                  Run code
                  Cut to clipboard

                    PDOStatement::bindColumn — 绑定一列到一个 PHP 变量。
                    安排一个特定的变量绑定到一个查询结果集中给定的列。每次调用 PDOStatement::fetch() 或 PDOStatement::fetchAll() 都将更新所有绑定到列的变量。
                    <?php function readData ( $dbh ) { $sql = 'SELECT name, colour, calories FROM fruit' ; try { $stmt = $dbh -> prepare ( $sql ); $stmt -> execute (); /* 通过列号绑定 */ $stmt -> bindColumn ( 1 , $name ); $stmt -> bindColumn ( 2 , $colour ); /* 通过列名绑定 */ $stmt -> bindColumn ( 'calories' , $cals ); while ( $row = $stmt -> fetch ( PDO :: FETCH_BOUND )) { $data = $name . "\t" . $colour . "\t" . $cals . "\n" ; print $data ; } } catch ( PDOException $e ) { print $e -> getMessage (); } } readData ( $dbh ); ?>
                    Run code
                    Cut to clipboard
                      #,广西南宁市,2017-05-22,16:53:48,@10, 黑鬼问号脸
                      文章:PDO 解决数据库乱码方法  发表时间:2017-05-20, 17:31:59  
                      展开↯

                      #1427

                      作者:广西南宁市
                      用canvas做画板,用 <input type="color">来控制颜色
                      <input type="color" name="" id="colorSelect" value="" /> <canvas id="canvas" width="320" height="200" style="border:1px solid #eee;">您的浏览器不支持canvas</canvas> <script> var selector = document.getElementById("colorSelect"); selector.onchange = function(){ var color = this.value; var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var w = canvas.width , h = canvas.height; ctx.fillStyle = color; ctx.fillRect(0, 0, w, h); } </script>
                      Run code
                      Cut to clipboard
                        #,广西南宁市,2017-05-22,16:14:38,
                        <input type="color" name="" id="newcolorSelect" value="" /> <script> var selector = document.getElementById("newcolorSelect"); selector.onchange = function(){ var newcolor = this.value; alert(newcolor); } </script>
                        Run code
                        Cut to clipboard
                          文章:常用html、demo代码  发表时间:2017-05-22, 16:13:42  
                          展开↯

                          #1428

                          作者:广西南宁市
                          想让雷军送F码,一定要表现出一个资深米粉的气质出来,必须从很早就开始使用小米手机,必须每场发布会必看,必须夸小米好出天际线,必须疯狂抢F码但一直未遂,必须祝雷军万事如意……总之,必须套路雷军。
                          #,广西南宁市,2017-05-09,09:56:50, 这是套路雷军还是被雷军套路?
                          #,广西南宁市,2017-05-09,11:25:03, 一个玩你的男人,永远只会对你说:别走,再陪陪我好吗?就一会,一小会……一个爱你的男人,他是会对你说:傻瓜这么晚了!早点回去吧!别让你老公起疑心了。
                          #,广西南宁市,2017-05-09,11:25:50, 坐在我对面的一对小情侣把包包里的套套拿出来数,男的说怎么少了一个,然后俩人开始回忆再哪哪什么时间用来的。
                          #,广西南宁市,2017-05-09,11:26:44, 不知什么时候,网上的“文明用语”已经不是文明用语
                          #,广西南宁市,2017-05-09,11:27:21, 我是直男,我非常讨厌gay里gay气的人,所以我希望我未来的另一半也是直男。
                          #,广西南宁市,2017-05-09,11:29:02, 如果你经常为猜不透女生的真实想法而苦恼,教你个办法,说话时去掉吧字就可以。将我陪你去吧,我给你买吧,我帮你弄吧,改成我陪你去,我给你买,我帮你弄,这时如果她还是拒绝就是真的拒绝。当然如果她拒绝的时候也带吧字,比如不太好吧,不要了吧,还是算了吧,那她就没有拒绝。
                          #,广西南宁市,2017-05-09,11:29:46, 学过物理的人大概都知道能量守恒定律:能量既不会产生,也不会消失,它只会从一种介质转移到另一种介质,或者从一个状态转移从另一个状态。
                          因此,如果你常年和傻x在一起,等到某一天你觉得对方似乎没有以往那么傻x了,这个时候你就要引起注意了。
                          #,广西南宁市,2017-05-09,11:30:46, “如果你看到面前的阴影,别怕,那是因为你的背后有光”我安慰房屋失火的朋友说。
                          #,广西南宁市,2017-05-09,11:31:46, 一人上山求解于大师:大师 为什么我打了三年英雄联盟技术意识还是没长进?
                          大师指着岩石上水滴的一个小凹洞
                          他激动的说道:大师您是说我只要坚持不懈 终有一天会水滴石穿 技术大进吗?
                          大师:你他妈就是个坑
                          #,广西南宁市,2017-05-09,11:32:02, 自从把闹钟设成国歌之后,我每天都成了愿意做奴隶的人……
                          #,广西南宁市,2017-05-09,11:33:42, 藏私房钱的时候,最好在里面塞张白纸写上“送给亲爱的她的惊喜。”
                          #,广西南宁市,2017-05-09,11:34:09, 我想要进行的一项关于男人为什么看AV的实验,结果还未开始便遭到重大失败:完全找不到不看AV的对照组!
                          #,广西南宁市,2017-05-09,11:35:09, “记住密码”,是忘记密码的最佳方式。
                          #,广西南宁市,2017-05-20,15:55:29,@13, 看了田源的措辞,感觉这人心智成熟度极低!而很多人却把对人的不礼貌行为当成性格豪爽耿直,真是令人三观尽毁~
                          #,广西南宁市,2017-05-20,15:55:51,@14, 我觉得这只是员工单方面的槽点而已。本以为内部同事说一些玩笑话。结果被人当真。就像有一次我和同事吐槽:不至于为几千块钱工资把命搭上。结果被辞退了。妈蛋。
                          #,广西南宁市,2017-05-20,15:59:00,@14, 第一次听说黄泛区,查询之后才知这是一段中华民族的苦难史。作为同胞,以此为歧视,也配做中国人!!!
                          #,广西南宁市,2017-05-20,16:04:49,@14, 其实我一眼就能识得,他是一个灵魂极为猥琐的家伙,但无关公德。
                          #,广西南宁市,2017-05-20,16:51:33, 社会平头哥,人狠话不多
                          文章:那几年,我觉得自己活得那么四面漏风  发表时间:2017-05-09, 09:56:37  
                          展开↯

                          #1429

                          作者:广西南宁市
                          jquery单引号和双引号的区别及使用注意
                          可以执行的语法:$("ul li a").filter(":contains('佳能'),:contains('松下'),:contains('卡西欧')").css("color","red");
                          错误的语法:$("ul li a").filter(":contains("佳能"),:contains("松下"),:contains("卡西欧")").css("color","red");
                          据资料显示在js中单引号和双引号都是一样的,但是在使用是去碰到了问题,于是乎百度给我答案,说是平时使用的时候尽量用单引号,只有碰到嵌套的时候才会同时用两种引号。即外面是单引号的时候里面就要用双引号,外面是双引号的时候里面就要用单引号,总之不能同时用双引号或者是单引号;
                          #,广西南宁市,2017-05-20,16:11:10, 从代码编译的角度说的话,单引号在JS中被浏览器(IE,Chrome,Safari)编译的速度更快(在FireFox中双引号更快)
                          #,广西南宁市,2017-05-20,16:11:34, 双引号需要按住shift键才能输入,比起单引号输入起来要麻烦。
                          #,广西南宁市,2017-05-20,16:11:51, 个人习惯,在js中我都用单引号,在json中,我都用双引号。
                          #,广西南宁市,2017-05-20,16:12:26, 建议用单引号,HTML 中用双引号,需要创建 HTML 组件的时候,随时复制黏贴就搞定了
                          #,广西南宁市,2017-05-20,16:12:37, 如果是一个人做开发,没有顾忌,可以跟随自己的喜好,JavaScript 同时支持两种引号,很大程度上跟你的输出有关,如果你需要输出双引号,那么外面就用单引号套,反之亦然
                          文章:常用html、demo代码  发表时间:2017-05-20, 16:09:41  
                          展开↯

                          #1430

                          作者:广西南宁市
                          使用jquery修改css中带有!important的样式属性
                          通过 $("div.test").css("width","100px");和 $("div.test").css("width","100px !important");是无效的
                          要想修改div的width,可以通过如下这种方式:
                          $("div.test").css("cssText", "width:650px !important;");
                          Run code
                          Cut to clipboard

                            要想修改多个属性,可以这么做:
                            $("div.test").css("cssText", "width:650px !important;overflow:hidden !important");
                            Run code
                            Cut to clipboard
                              文章:常用html、demo代码  发表时间:2017-05-20, 16:09:08  
                              展开↯

                              #1431

                              作者:北京市
                              知乎,与世界分享你刚编的故事
                              #,广西南宁市,2017-05-20,15:05:56, 知乎-与世界分享匿名的谣言。
                              #,广西南宁市,2017-05-20,15:07:37, “知乎精英”怎么就成了骂人的词
                              #,广西南宁市,2017-05-20,15:07:46, 先问是不是,在问为什么?
                              #,广西南宁市,2017-05-20,15:09:16, 我一朋友在某银行的金融平台上班,人家执行力就是很慢,可人家一个星期的交易额都赶上一些知名P2P平台一年的量了。
                              #,广西南宁市,2017-05-20,15:09:51, 确实看上去很有用,实际上并没有什么卵用
                              #,广西南宁市,2017-05-20,15:45:45, 偏好,偏见,歧视
                              偏好就是你喜欢吃香菜;
                              偏见就是你觉得不喜欢吃香菜的人味觉有问题;

                              歧视就是你觉得不喜欢吃香菜的人智商有问题。

                              对偏好要包容,对偏见要努力消除,对歧视要抵制。看着是不是很简单?

                              可惜这三者的界限往往很模糊。

                              举个例子,30岁的你想让婚介帮自己找个年轻的人女性结婚,所以他加上了一个择偶条件“30岁以下20岁以上”。这时候一个人走了过来,告诉他:“你这是歧视!你有没有想过为什么现在所有人都要求女性30岁以下,30岁以上的女性难道真的就有什么不同了吗?抵制歧视,就应该从现在做起。“

                              你一想似乎是这个道理啊,而后你就把择偶条件改成了60岁以下。正当这个时候,又有个人走过来,他问了你第二个问题:”你有没有想过60岁以上女性的感受?难道人退休了就不应该有爱情了吗?为什么你要在纸面上区别对待某类人呢?“

                              是啊,为什么要做这样的事情呢?

                              你毅然决然的划掉了你的择偶年龄标准。在经过一番无比复杂的筛选之后,你终于找到了一个年芳25的完美伴侣。正当你和她一起去民政局准备领证的时候,一大帮人跑到了你的面前,愤怒的指责你:”你这个人怎么就是不听劝呢?我们那么苦口婆心的和你讲,不要歧视30岁以上的女子,你最后怎么还是选了一个不到30的女子?你心里还是有歧视啊!抵制歧视,应该从你我做起!“

                              你不好意思的放开了伴侣的手,独自一个人走回家里,快到家门的时候才想起来:”不对啊,我只是想找个比我年轻的结婚罢了。“

                              看到这里你可能会觉得上面的事情很荒诞,可惜这样的事情其实每天都发生在我们周围。偏好的过度表达造成了偏见,偏见的集中表达又引起了歧视。贝克尔(Gary Becker)在他的《种族歧视经济学》(The Economics of Discrimination )写的更加精辟:歧视往往是一种社会习俗,对个体来说,不遵从规则往往就意味着被赶出这个群体,但是留在这个群体里面对普通人来说往往是利大于弊的。歧视成了主流,非歧视的行为就会反过来受损。违背规则,往往会受到损失。

                              有的时候,一个人想说自己不喜欢吃香菜也是件不容易的事情。
                              文章:街上如果看到两个姑娘向你走来,可要小心  发表时间:2017-03-08, 19:40:11  
                              展开↯

                              #1432

                              作者:广西南宁市
                              null一穷二白,难道你从帽子里变出东西来?吃五个饼会饱,只吃第五个肯定饱不了。
                              #,广西南宁市,2017-05-20,15:14:20, 创新是什么,我认为是从零到一,然而很多很多东西从零到一的过程都是经历过0.001、0.01、0.1一个或漫长或相对较短的过程再最后到1的。
                              #,广西南宁市,2017-05-20,15:23:47,@1, 到现在了 我觉得还在说抄袭两个字,真的是特别的low。 市场上的产品,难道真的只能一家玩? 我能说苹果出手机还是抄袭摩托罗拉吗?
                              #,广西南宁市,2017-05-20,15:24:39, 说颠覆和怼谈不上。但战略卡位还是需要的。未来谁也说不准,万一这个铺垫成了伏笔呢。
                              文章:那几年,我觉得自己活得那么四面漏风  发表时间:2017-05-06, 15:32:42  
                              展开↯

                              #1433

                              作者:广西南宁市
                              文章:一加3T:简单开箱 + 第一印象  发表时间:2017-05-20, 14:57:35  
                              展开↯

                              #1434

                              作者:广西南宁市
                              1、小米利用自己的手机品牌知名度,销售净化器、插线板这些周边这个想法很新颖;
                              2、小米每件东西的价格都做到很低,量容易上去;
                              3、小米周边都卖的不错,特别是文中提到的三个,营收很高。
                              移动电源、插线板、净化器都没有很强的巨头,而且现有产品的外观,功能都很有“痛点”需要解决。但外观性创新是大家都看得见,摸得着,容易模仿的,一旦当传统行业巨头反应过来了(比如公牛),那么没有核心技术作为壁垒/后盾,光靠品牌、外观、价格打头阵,很容易被拉入红海,变成只有营收,没有利润的产品。而技术更强、供应链更成熟、销售渠道更扎实的传统企业,很容易就翻身,那这场“商业战争",孰胜孰负仍未可知。
                              文章:从发烧友手机品牌到搅局巨头,小米这六年发生了什么?  发表时间:2017-05-20, 14:55:37  
                              展开↯

                              #1435

                              作者:广西南宁市
                              jQuery实现高亮显示网页关键词的方法
                              <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jquery文字高亮显示</title> <style type="text/css"> .highlight { background-color: #fff34d; -moz-border-radius: 5px; /* FF1+ */ -webkit-border-radius: 5px; /* Saf3-4 */ border-radius: 5px; /* Opera 10.5, IE 9, Saf5, Chrome */ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* FF3.5+ */ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* Saf3.0+, Chrome */ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* Opera 10.5+, IE 9.0 */ } .highlight { padding:1px 4px; margin:0 -4px; } </style> </head> <body> Search: <input type="text" id="text-search" /> <p>This can include web design, web content development, client liaison, client-side/server-side scripting, web server and network security configuration, and e-commerce development. However, among web professionals, "web development" usually refers to the main non-design aspects of building web sites: writing markup and coding. Web development can range from developing the simplest static single page of plain text to the most complex web-based internet applications, electronic businesses, or social ntwork services.</p> (Text from Wikipedia) <script type="text/javascript" src="https://lizhenqiu.com/templates/default/jquery.min.js"></script> <script type="text/javascript"> jQuery.fn.highlight = function(pat) { function innerHighlight(node, pat) { var skip = 0; if (node.nodeType == 3) { var pos = node.data.toUpperCase().indexOf(pat); if (pos >= 0) { var spannode = document.createElement('span'); spannode.className = 'highlight'; var middlebit = node.splitText(pos); var endbit = middlebit.splitText(pat.length); var middleclone = middlebit.cloneNode(true); spannode.appendChild(middleclone); middlebit.parentNode.replaceChild(spannode, middlebit); skip = 1; } } else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) { for (var i = 0; i < node.childNodes.length; ++i) { i += innerHighlight(node.childNodes[i], pat); } } return skip; } return this.each(function() { innerHighlight(this, pat.toUpperCase()); }); }; jQuery.fn.removeHighlight = function() { function newNormalize(node) { for (var i = 0, children = node.childNodes, nodeCount = children.length; i < nodeCount; i++) { var child = children[i]; if (child.nodeType == 1) { newNormalize(child); continue; } if (child.nodeType != 3) { continue; } var next = child.nextSibling; if (next == null || next.nodeType != 3) { continue; } var combined_text = child.nodeValue + next.nodeValue; new_node = node.ownerDocument.createTextNode(combined_text); node.insertBefore(new_node, child); node.removeChild(child); node.removeChild(next); i--; nodeCount--; } } return this.find("span.highlight").each(function() { var thisParent = this.parentNode; thisParent.replaceChild(this.firstChild, this); newNormalize(thisParent); }).end(); }; </script> <script type="text/javascript"> $(function() { $('#text-search').bind('keyup change', function(ev) { // pull in the new value var searchTerm = $(this).val(); // remove any old highlighted terms $('body').removeHighlight(); // disable highlighting if empty if ( searchTerm ) { // highlight the new term $('body').highlight( searchTerm ); } }); }); </script> </body> </html>
                              Run code
                              Cut to clipboard
                                文章:常用html、demo代码  发表时间:2017-05-19, 18:47:23  
                                展开↯

                                #1436

                                作者:广西南宁市
                                乐视不是宣布破产了的吗
                                展开↯

                                #1437

                                作者:广西南宁市
                                我大百度呢?我大百度呢?
                                #,广西南宁市,2017-05-19,09:50:12, 百度一下你就知道
                                #,广西南宁市,2017-05-19,09:50:53, 很显然你们这帮中年人会看好阿里,但世界终将是那帮中小学生的
                                #,广西南宁市,2017-05-19,09:51:31, 这是阿里首次在年收入上超越腾讯~ 看看两家的财报:腾讯游戏业务收入占比在减少,着重强调了内容生态和广告的收入。阿里对于电商的力度好像也在减弱,在什么云计算啊、娱乐啊等创新项目上展现自己的业绩了。
                                #,广西南宁市,2017-05-19,09:51:45,@3, 阿里的场子够大,只要保持稳定增长,腾讯是拍马赶不上。
                                #,广西南宁市,2017-05-19,09:52:11, 百度早已不在一个量级。输在了移动端。
                                #,广西南宁市,2017-05-19,09:52:33,@2, 小学生总会成年,同样也会有更多的小学生出现。个人认为,二者的潜力还是得看谁的全球化能成功,全球化做的更好的更强。腾讯的大娱乐版块是有可能全球化成功的,其余的比较难
                                #,广西南宁市,2017-05-19,09:53:25,@2, 小孩长大了总归还是要买买买,不可能打一辈子游戏吧
                                #,广西南宁市,2017-05-19,09:54:18,@1, 百度快退出三大巨头的舞台了。
                                文章:【转】相遇3000亿美金之巅,阿里腾讯战力与血值几何?  发表时间:2017-05-19, 09:49:53  
                                展开↯

                                #1438

                                作者:广西南宁市
                                阿里巴巴的竞争对手不在中国而在硅谷。
                                #,广西南宁市,2017-05-19,09:53:41, 阿里这一步步走来,真的非常非常佩服马云的格局观,而且战略落地的能力太强。。。
                                #,广西南宁市,2017-05-19,09:53:50, 一个企业家,一个商业家
                                #,广西南宁市,2017-05-19,09:54:06,@2, 两个都是在中国局域网里混吃混喝,窝里斗的
                                文章:【转】相遇3000亿美金之巅,阿里腾讯战力与血值几何?  发表时间:2017-05-19, 09:51:58  
                                展开↯

                                #1439

                                作者:广西南宁市
                                冒泡排序算法的可视化
                                <!DOCTYPE html> <html ng-app> <head> <script data-require="angular.js@1.3.0-beta.5" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script> <style>/* Styles go here */ .value-line{ margin-bottom:1px; background:green; color:white; } </style> <script>// Code goes here function ctrl($scope,$timeout){ var defaultData=[37,28,29,24,21,11,5,10,4,3,8,1,25,12,20,30]; $scope.reset=function(){ $scope.data=defaultData.map(function(i){ return i; }); pointer=0; checklen=$scope.data.length; $scope.alertMsg=""; } var sorting=function(){ var data=$scope.data; if(data[pointer]>data[pointer+1]) { var tmp=data[pointer]; data[pointer]=data[pointer+1]; data[pointer+1]=tmp; } pointer++; if( pointer>=checklen){ checklen--; pointer=0; } if(checklen <=0){ $scope.alertMsg="排序结束"; }else{ $timeout(sorting,100); } }; $scope.start=function(){ $timeout(sorting,100); } $scope.reset(); }</script> </head> <body> <h1>冒泡排序算法视觉化</h1> <div ng-controller="ctrl"> <div class="value-line" ng-repeat="i in data" style="width:{{i*10}}px;">{{i}}</div> <button ng-click="start()">排序</button> <button ng-click="reset()">重置</button> <span style="color:red">{{alertMsg}}</span> </div> </body> </html>
                                Run code
                                Cut to clipboard
                                  文章:常用html、demo代码  发表时间:2017-05-18, 17:25:39  
                                  展开↯

                                  #1440

                                  作者:广西南宁市
                                  php实现图片以base64显示的方法
                                  $img_file = 'https://img.alicdn.com/bao/uploaded/TB1eaiELpXXXXcPXpXXSutbFXXX.jpg'; $img_info = getimagesize($img_file); $img_src = "data:{$img_info['mime']};base64," . base64_encode(file_get_contents($img_file)); exit("<img src='{$img_src}' />");
                                  Run code
                                  Cut to clipboard
                                    文章:程序员编程常用网页工具集[游戏]  发表时间:2017-05-18, 11:18:26  
                                    展开↯

                                    #1441

                                    作者:北京市
                                    饿得睡不着,困得吃不下。
                                    文章:以程序员的名义,分析 “人民的名义”  发表时间:2017-05-17, 23:20:11  
                                    展开↯

                                    #1442

                                    作者:广西南宁市
                                    说明:
                                    scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。
                                    clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变。
                                    offsetWidth:对象整体的实际宽度,包滚动条等边线,会随对象显示大小的变化而改变。
                                    #,广西南宁市,2017-05-17,17:24:01, scrollHeight返回元素的完整的高度,以像素为单位.
                                    当一个元素拥有滚动条时(比如由于 CSS 的 overflow 属性),这些属性和 offsetHeight 不同,offsetHeight只是报告元素的可见部分的大小。这是非标准的但却得到很好支持的属性。
                                    这个属性是非标准的,所以在不同浏览器中可能会存在差异,例如:
                                    在Firefox浏览器中:
                                    scrollHeight就是滚动条可滚动的部分还要加上border的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.
                                    在IE浏览器中:
                                    指这个对象它所包含的对象的高度加上border的高度和margin
                                    #,广西南宁市,2017-05-17,17:26:07, 详情请看这个jsfiddle:http://jsfiddle.net/1hzhrwLs/
                                    <style>body { padding: 50px; } div { width: 120px; border: 1px solid gray; } .long { width: 400px !important; } .ellipsis { text-overflow: ellipsis; overflow: hidden; }</style> <div class="operateTarget ellipsis"></div> <div class="operateTarget ellipsis long"></div> <div class="operateTarget"></div> <div class="ellipsis"></div> <script> $("div").text('very_very_very_very_long_text'); $(".operateTarget").map(function() { if (this.offsetWidth < this.scrollWidth) { $(this).css("color", "red"); } }); </script>
                                    Run code
                                    Cut to clipboard
                                      文章:常用html、demo代码  发表时间:2017-05-17, 17:23:09  
                                      展开↯

                                      #1443

                                      作者:广西南宁市
                                      TextArea里Placeholder换行 使用jQuery的watermark控件 jquery.watermark.js
                                      问题
                                        页面上使用TextArea控件时,会时不时的想给个提示,比如按照一定方式操作之类的。正常情况下,会使用Placeholder,但这样的提示是不会换行的,无论是用\r\n,还是用<br/>,都不起作用。

                                        前段时间碰到这个问题,一直没有解决,所有页面上的Placeholder都是一行到底,丑死了。

                                        无意中,一个朋友提供了一个方法,完美的解决了问题,贴出来和大家分享一下:

                                        CSS:
                                      #text1::-webkit-input-placeholder::after { display:block; content:"Line 2\A Line 3"; } #text2::-webkit-input-placeholder::before { color:#666; content:"Line 1\A Line 2\A Line 3\A"; }
                                      Run code
                                      Cut to clipboard

                                        火狐和其他浏览器不兼容,有自己专门的方法(以下):
                                        textarea::-moz-placeholder:after{ content:"line@ \A line#";/* \A 表示换行 */ color:red; };
                                        Run code
                                        Cut to clipboard

                                          实际测试了一下,还是不能用。
                                          文章:常用html、demo代码  发表时间:2017-05-17, 16:54:13  
                                          展开↯

                                          #1444

                                          作者:广西南宁市

                                          TCP协议与UDP协议的区别
                                          首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!
                                          TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。
                                          TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
                                          其中应用层包括:
                                          超文本传输协议(HTTP):万维网的基本协议.
                                          文件传输(TFTP简单文件传输协议):
                                          远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录
                                          internet主机,并在这台主机上执行命令.
                                          网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.
                                          域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.
                                          其次网络层包括:
                                          Internet协议(IP)
                                          Internet控制信息协议(ICMP)
                                          地址解析协议(ARP)
                                          反向地址解析协议(RARP)
                                          最后说网络访问层:网络访问层又称作主机到网络层(host-to-network).网络访问层的功能包括IP地址与物理地址硬件的映射,以及将IP封装成帧.基于不同硬件类型的网络接口,网络访问层定义了和物理介质的连接.
                                          当然我这里说得不够完善,TCP/IP协议本来就是一门学问,每一个分支都是一个很复杂的流程,但我相信每位学习软件开发的同学都有必要去仔细了解一番。
                                          下面我着重讲解一下TCP协议和UDP协议的区别。
                                          TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
                                          详细点说就是:(文章部分转载http://zhangjiangxing-gmail-com.iteye.com,主要是这个人讲解得很到位,的确很容易使人理解!)
                                          TCP三次握手过程
                                          1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,
                                          主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.
                                          2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:
                                          我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我
                                          3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了
                                          这样3次握手就完成了,主机A和主机B 就可以传输数据了.
                                          3次握手的特点
                                          没有应用层的数据
                                          SYN这个标志位只有在TCP建产连接时才会被置1
                                          握手完成后SYN标志位被置0

                                          TCP建立连接要进行3次握手,而断开连接要进行4次

                                          1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
                                          2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
                                          3 由B 端再提出反方向的关闭请求,将FIN置1
                                          4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
                                          由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端
                                          和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
                                          名词解释
                                          ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段
                                          都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
                                          SYN 同步序列号,TCP建立连接时将这个位置1
                                          FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
                                          TCP的包头结构:
                                          源端口 16位
                                          目标端口 16位
                                          序列号 32位
                                          回应序号 32位
                                          TCP头长度 4位
                                          reserved 6位
                                          控制代码 6位
                                          窗口大小 16位
                                          偏移量 16位
                                          校验和 16位
                                          选项 32位(可选)
                                          这样我们得出了TCP包头的最小长度,为20字节。

                                          UDP(User Data Protocol,用户数据报协议)
                                          (1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
                                          (2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
                                          (3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
                                          (4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
                                          (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
                                          (6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
                                          我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
                                          UDP的包头结构:
                                          源端口 16位
                                          目的端口 16位
                                          长度 16位
                                          校验和 16位

                                          小结TCP与UDP的区别:
                                          1.基于连接与无连接;
                                          2.对系统资源的要求(TCP较多,UDP少);
                                          3.UDP程序结构较简单;
                                          4.流模式与数据报模式 ;
                                          5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
                                          #1634,<br/>和</br>区别
                                          在早先发布的html规范中<br>/<hr>/<img>等标记元素是无需“封闭自身”的,这就造成了html规范本身的不严谨,所以后来参考了更规范的XML语言的语法推出了xhtml。
                                          在xhtml中所有类似br这样的孤立标签都需要自行封闭,具体的做法就是在标签名字的后面跟个“/”,例如<br />,因此,是没有</br>这个写法的。从逻辑上讲<br />=<br>...</br>,这样做的目的是为了尽量减少网页的代码量,同时保持逻辑严谨。
                                          #,广西南宁市,2017-05-17,10:53:21, 很有帮助,不过PING命令似乎是基于ICMP的而非UDP?
                                          #,广西南宁市,2017-05-17,10:53:45,@1, 确实是基于 ICMP协议的 “Echo Request” 报文进行工作
                                          #,广西南宁市,2017-05-17,11:03:07, TCP(传输控制协议):

                                          1)提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;

                                          2)面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,像打电话。

                                          3)TCP支持的应用协议:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。TCP用于传输数据量大,可靠性要求高的应用。

                                          UDP(用户数据报协议,User Data Protocol)

                                          1)面向非连接的(正式通信前不必与对方建立连接,不管对方状态就直接发送,像短信,QQ),不能提供可靠性、流控、差错恢复功能。UDP用于一次只传送少量数据,可靠性要求低、传输经济等应用。

                                          2) UDP支持的应用协议:NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。

                                          总结:

                                          TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

                                          UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
                                          #,广西南宁市,2017-05-17,11:09:54, QQ 为什么以 UDP 协议为主,以 TCP 协议为辅?
                                          文章:常用html、demo代码  发表时间:2017-05-17, 10:52:41  
                                          展开↯
                                          你好,残忍屏蔽广告

                                          确定要清除编辑框内容吗?

                                          该删除操作将不可恢复。

                                          删除 取消

                                          激活Windows

                                          转到"设置"以激活Windows。