第82篇 webrtc一对一研究(十)及php

关键词:GetQueryString, 老师端传参数及学生端传参, substr_count, parse_url,urlencode

一、webrtc

1.1  老师端传参数及学生端传参

老师端:

https://www.xq.com:9001/?room_id=333

学生端:

https://www.xq.com:9001/#333

注:老师端需要传一个room_id进去,打开房间,建立完房间之后,学生才可以进去。代码支持如下:

打开房间:

a) 用按钮打开房间

<buttonid="open-room" style="width:110px;font-size:18px;">打开房间</button></span>

按钮单击事件:

b) 传参数打开房间

         function GetQueryString(name){

                             var reg = new RegExp("(^|&)"+name +"=([^&]*)(&|$)");

                             var r =window.location.search.substr(1).match(reg);

                             if(r!=null)return  decodeURI(r[2]); return null;

                   }

                   var_room_id = GetQueryString('room_id');

        var _from = GetQueryString('from');

        var _pu = GetQueryString('pu');

        var _name = GetQueryString('name');

  接收参数后,会根据room_id的值进行模拟单击按钮的操作,如下:

1.2  分析一个正则表达式函数GetQueryString

                   functionGetQueryString(name){

                             var reg = new RegExp("(^|&)"+name +"=([^&]*)(&|$)");

                             var r =window.location.search.substr(1).match(reg);

                             if(r!=null)return  decodeURI(r[2]); return null;

                   }

  a) 函数名为:GetQueryString(),需要传一个参数name,这是一个js写法

  b) var reg = new RegExp("(^|&)"+ name+"=([^&]*)(&|$)");

   RegExp 的构造函数创建了一个正则表达式对象,用模式来匹配文本。

  正则表达式规则:

模式/ab*c/匹配了一个单独的 'a' 后面跟了零个或者多个 'b'(*的意思是前面一项出现了零个或者多个),即:b可以出现一次,也可以出现多次。看个例子:

注:exec方法只能找到第一个,并返回。

(^|&)"+ name+"=([^&]*)(&|$)

这个正则表达式的意思是:以&号或其他开头,中间传过来一个变量name,后面

(^|&)   :^匹配字符串开头,&就是&字符,(^|&)匹配字符串开头或者&字符,如果其后还有正则,那么必须出现在字符串开始或&字符之后

name   :变量

([^&]*)  :[^&]表示匹配不包含&的内容 *表示可以重复0或N次

(&|$)   :表示&结束或直到结尾

 c) var r = window.location.search.substr(1).match(reg);

window.location.search方法是截取当前url“?”后面的字符串

比方说:https://www.xq.com:9001/?room_id=333将输出:?room_id=333;

substr(1):是截取字符串,从第1个输出(字符串从0开始记):

window.location.search.substr(1)

上面这句,对https://www.xq.com:9001/?room_id=333,将输出:room_id=333;

window.location.search.substr(1).match,match将对前面window.location.search.substr(1)截取的字符串进行按reg匹配,因为reg中有四部分,所以将匹配4个部分,如下:

分析: https://www.xq.com:9001/?room_id=333

主要对room_id=333进行匹配,

一、((^|&)"+ name +"=([^&]*)(&|$))是整体匹配,整体匹配,匹配到了:room_id=333

二、(^|&)   :匹配到了空,因为不是以&开头的。

三、 ([^&]*)  :前面有个等号,就是等号后面的,不包含&,所以匹配到了333.

四、(&|$):表示跟在前面匹配到的字符后面必须是&或$,所以匹配到了空。

再看个例子:

注:这个函数可以进行匹配,但它只找等号(name=)旁边的,

第一次匹配room_id时:

room_id=1234&name=刘德华

它找的是从开始到room_id=后面的,非&的,最后是&号之前的,恰好为1234;

第二次匹配时from时:

room_id=1234&name=刘德华

它找的是&开始,接着是name=之后,非&号字符,直到碰到&,如果一直没碰到,就直到结束为止。

 

d) if(r!=null)return decodeURI(r[2]);

return null;

这两句话的意思是:如果r不是空的话,就返回解码后的r[2](room_id=333,就返回333),否则,就返回空。

decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。看个例子,在本例中,我们将使用 decodeURI() 对一个编码后的 URI 进行解码:

1.3 清屏按钮同时清空学生端

 清屏函数:

        function cleanAll(){

                   designer.undo('all');-------------函数1

        }

 上述函数用到了:designer.undo('all'),对它进行追踪如下:

    designer.undo = function(index) {

        if (!designer.iframe) return;

 

        designer.postMessage({-----------------------函数2

            undo: true,

            index: index ||designer.pointsLength - 1 || -1

        });

};

上述函数中,有一个designer.postMessage()函数,很重要,对它进行追踪如下:

   designer.postMessage = function(message) {

       if (!designer.iframe) return;

 

       message.uid = designer.uid;

       designer.iframe.contentWindow.postMessage(message, '*');

    };

这个目前的思路有两个:

  1) 同步:清屏之后,不等铅笔写新字,立马同步;

  2) 消息机制:老师端点清屏按钮时,向学生端发一条消息,学生端也立刻执行清屏函数。

 

二、php

2.1字符串统计函数substr_count()

在一个字符串中统计一个子字符串出现的次数,看个例子:

注:从程序运行结果可以看出,这个函数substr_count()在统计时是区分大小写的。另外,还可以指定第三个参数、第四个参数,第三个参数表示从哪个位置起始,第四个参数表示查找几个字符,看个例子:

注:从上述两个输出,可以看到均为0次。第一个good超过第9个字符了,所以查找不到;第二个day虽然没超过第9个字符,但因为只查了一个字符,所以也不可能查到。

2.2 parse_url()

 上述函数是url解析函数,能对url进行解析,返回一个数组,看个例子:

注:从结果可以看出,会返回一些参数并且有对应的值,因此,我们可以请求部分值,看个例子:

注:由上述返回的结果可知,我们在开发项目是,可以根据需要取出相应的值,而不是全部。

2.3 urlencode

 urlencode()函数用于对url进行编码。先看一个明文传输的例子:

点击上图的超链接,结果如下:

可以看出,url中没有进行编码,用的是明文传输,这样是不安全的。

2016年10月28日星期五


 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值