php使用正则替换过滤掉js(script)脚本例子

 更新时间:2016年11月25日 17:24  点击:1915
利用php中的preg_replace正则匹配函数过滤掉网页中的js代码,preg_replace()中的第四个参数中表示替换的次数,默认是-1,表示替换全部;如果只想替换2次,可以写为 preg_replace($p1,$p2,$p3,2)。

匹配的规则不能用 "//<script.*<//script>//i",因为它不能匹配到换行符,那么多行js就匹配不掉了。要用 "//<script[sS]*?<//script>//i"。里面的?表示尽可能少重复,也就是匹配最近的一个<//script>。

源码范例:

php匹配js

 代码如下 复制代码

<?php

 

 header("Content-type:text//html;charset=utf-8");

 $str = '<script type="text//javascript" src="dd.js"><//script>

测试php正则匹配掉js代码<script type="text//javascript" src="123.js"><//script>

<script type="text//javascript">

 var aa = "sdsds";

 alert(aa);

<//script>

测试php正则匹配掉js代码';

 www.111Cn.net


 $preg = "//<script[sS]*?<//script>//i";

 $newstr = preg_replace($preg,"",$str,3);    ////第四个参数中的3表示替换3次,默认是-1,替换全部

 echo $newstr;

 


?>

在Drupal 7 以后我们可以轻松使用类似模态框的overlay模块来实现一个弹出层。下面我介绍2个实例,如何自定义扩展Overlay。

Drupal overlay examples
扩展 Overlay 模块头部显示用户头像实例
在你的自定义模块中加入overlay脚本JS文件,通过overlay的钩子:

 代码如下 复制代码

function mymodule_overlay_child_initialize() {
  // Add our custom JavaScript.
  drupal_add_js(drupal_get_path('module', 'mymodule') . '/overlay-child.js');
}然后通过Add JS 头像路径到header中。

/**
 * @see hook_js_alter().
 */
function yourtheme_js_alter(&$javascript) {
  global $theme, $user;
  if (isset($user->picture) && is_string($user->picture)) {
    $picture = file_load($user->picture);
  } www.111cn.net
  elseif (isset($user->picture) && is_object($user->picture)) {
    $picture = $user->picture;
  }
  if (isset($picture) && $picture && isset($picture->uri)) {
    $filepath = file_create_url($picture->uri);
    $javascript['settings']['data'][]['user_picture'] = $filepath;
  }
}

在overlay-child.js文件中加入以下Javascript 代码:

 代码如下 复制代码

(function ($) {
    Drupal.behaviors.yourmodule = {
        attach: function (context) {
            $('#overlay:not(.your-module-adjusted)', context).each(function() {
                if (Drupal.settings.user_picture) {
                    $('#overlay-titlebar', this).css('padding-left', 0);
                    $('#overlay-title-wrapper', this).find('h1#overlay-title').prepend('<img src="'+Drupal.settings.user_picture+'" />');
                }
            }).addClass('your-module-adjusted');
            $('.overlay .footer').hide();
        }
    };
})(jQuery);

完成后,你就可以看到如上面的图片的效果。

修改overlay覆盖层的宽度和隐藏元素实例
下面这个例子向你展示如何修改overlay (覆盖层) 内的内容,当一个指定的节点类型(test)被展示在overlay 覆盖层。这个脚本向你展示修改overlay层的宽度为450px 和 隐藏一些不想见到的元素。


在你的模块中同样需要想上面的例子那样加入overlay-child.js脚本。

在overlay-child.js文件中加入以下Javascript 代码:

 代码如下 复制代码

(function ($) {
  // Adjust the overlay dimensions.
  Drupal.behaviors.myModule = {
    attach: function (context) {
      $('#overlay:not(.mymodule-adjusted)', context).each(function() {
        var $test = $(this).find('.node-type-test');
        if ($test.length){
          // adjust the overlay
          $(this).css({
            'width'     : '450px',
            'min-width' : '450px'
          });www.111cn.net
          $('.add-or-remove-shortcuts', this).hide();  // hide "add short-cut" button
          $('#branding', this).hide();  // hide branding container
        }
      }).addClass('mymodule-adjusted');
    }
  };
})(jQuery);


如果你想修改所有overlay层里的布局,请找到overlay.tpl.php然后修改它。

 

今天在调试腾讯微博接口时,出现一个错误,找了网上都没有相关资料,最后自己调通了,故发布此博文,避免各位phper重复造轮子。

错误信息:

 代码如下 复制代码

stdClass Object
(
    [data] =>
    [detailerrinfo] => stdClass Object
        (
            [accesstoken] =>
            [apiname] => www.111cn.net
            [appkey] => 801485800
            [clientip] => 112.193.138.133
            [cmd] => 0
            [proctime] => 0
            [ret1] => 3
            [ret2] => 3
            [ret3] => 102
            [ret4] => 3659629834
            [timestamp] => 1394436892
        )

    [errcode] => 102
    [msg] => missing parameter
    [ret] => 3
    [seqid] => 1394436894
)


在腾讯微博开放平台的官方资料中,未发现解释此错误代码102的开发文档。经过与腾讯微博PHP SDK对比后发现少了一个参数。

解决错误代码102的办法
在请求用户资料的参数中oauth_version是必填的,而且在OAuth2中,它的值必须为2.a。

请求的参数中,OAuth2部分需包含:

字段 说明

 代码如下 复制代码

oauth_consumer_key appkey
access_token 授权获得的accesstoken
openid 授权获取的openid
clientip 客户端的ip
oauth_version 版本号,必须为2.a
scope 请求权限范围(默认“all”)

Drupal 腾讯微博登录实例代码
$http = drupal_http_request(url('https://open.t.qq.com/api/user/info', array(
  'query' => array(
    'access_token' => $access_token,
    'oauth_consumer_key' => $provider['key'],
    'openid' => $_GET['openid'],
    'clientip' => ip_address(),
    'scope' => 'all',
    'seqid' => REQUEST_TIME,
    'serverip' => $_SERVER['SERVER_ADDR'],
    'oauth_version' => '2.a',
    //'appfrom' => 'php-sdk2.0beta',
  ),
)));

注意:

加上字段后需要重新从登录页面重新授权一次,不然会出现错误“check sign error” 错误代码36。


以下重复刷新接口导致的签名错误返回值:

 代码如下 复制代码

stdClass Object
(
    [data] =>
    [detailerrinfo] => stdClass Object
        (
            [accesstoken] =>
            [apiname] => weibo.user.info
            [appkey] => 801485800
            [clientip] => 112.193.138.133
            [cmd] => 0
            [proctime] => 0
            [ret1] => 3
            [ret2] => 3
            [ret3] => 36
            [ret4] => 2636350730
            [timestamp] => 1394437225
        )

    [errcode] => 36
    [msg] => check sign error
    [ret] => 3
    [seqid] => 1394437227
)

获取腾讯微博用户资料
获取当前登录用户的个人资料 user/info 接口返回值的字段说明:

 代码如下 复制代码
{
 errcode : 返回错误码,
 msg : 错误信息,
 ret : 返回值,0-成功,非0-失败,
 data :
 {
  birth_day : 出生天,
  birth_month : 出生月,
  birth_year : 出生年,
  city_code : 城市id,
  comp :
  {
   begin_year : 开始年,
   company_name : 公司名称,
   department_name : 部门名称,
   end_year : 结束年,
   id : 公司id
  },
  country_code : 国家id,
  edu : 教育信息
  {
   departmentid : 院系id,
   id : 教育信息记录id,
   level : 学历级别,
   schoolid : 学校id,
   year : 入学年
  },
  fansnum : 听众数,
  favnum : 收藏数,
  head : 头像url,
  homecity_code : 家乡所在城市id,
  homecountry_code : 家乡所在国家id,
  homepage : 个人主页,
  homeprovince_code : 家乡所在省id,
  hometown_code : 家乡所在城镇id,
  idolnum : 收听的人数,
  industry_code : 行业id,
  introduction : 个人介绍,
  isent : 是否企业机构,
  ismyblack : 是否在当前用户的黑名单中,0-不是,1-是,
  ismyfans : 是否是当前用户的听众,0-不是,1-是,
  ismyidol : 是否是当前用户的偶像,0-不是,1-是,
  isrealname : 是否实名认证,1-已实名认证,2-未实名认证,
  isvip : 是否认证用户,0-不是,1-是,
  location : 所在地,
  mutual_fans_num : 互听好友数,
  name : 用户帐户名,
  nick : 用户昵称,
  openid : 用户唯一id,与name相对应,
  province_code : 地区id,
  regtime : 注册时间,
  send_private_flag : 是否允许所有人给当前用户发私信,0-仅有偶像,1-名人+听众,2-所有人,
  sex : 用户性别,1-男,2-女,0-未填写,
  tag : 标签
  {
   id : 个人标签id,
   name : 标签名
  },
  tweetinfo : 最近的一条原创微博信息
  {
   city_code : 城市码,
   country_code : 国家码,
   emotiontype : 心情类型,
   emotionurl : 心情图片url,
   from : 来源,
   fromurl : 来源url,
   geo : 地理位置信息,
   id : 微博唯一id,
   image : 图片url列表,
   latitude : 纬度,
   location : 发表者所在地,
   longitude : 经度,
   music : 音频信息
   {
    author : 演唱者,
    url : 音频地址,
    title : 音频名字,歌名
   },
   origtext : 原始内容,
   province_code : 省份码,
   self : 是否自已发的的微博,0-不是,1-是,
   status : 微博状态,0-正常,1-系统删除,2-审核中,3-用户删除,4-根删除,
   text : 微博内容,
   timestamp : 服务器时间戳,不能用于翻页,
   type : 微博类型,1-原创发表,2-转载,3-私信,4-回复,5-空回,6-提及,7-评论,
   video : 视频信息
   {
    picurl : 缩略图,
    player : 播放器地址,
    realurl : 视频原地址,
    shorturl : 视频的短url,
    title : 视频标题
   }
  },
  tweetnum : 发表的微博数,
  verifyinfo : 认证信息,
  exp : 经验值,
  level : 微博等级
 },
 seqid : 序列号
}

剩下的事就非常容易了,处理你自己程序部分的逻辑业务。

 

下面我来给各位朋友推荐一个php有道翻译api调用方法,这里我们利用了file_get_contents函数直接读取由api返回的数据进行处理了,希望此例子对大家会有所帮助。

调用之前我们需申请一个有道翻译API数据接口的key,地址如

http://fanyi.youdao.com/openapi?path=data-mode

方法说明,数据接口

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本

参数说明:

type - 返回结果的类型,固定为data

doctype - 返回结果的数据格式,xml或json或jsonp

version - 版本,当前最新版本为1.1

q - 要翻译的文本,不能超过200个字符,需要使用utf-8编码

errorCode:

0 - 正常

20 - 要翻译的文本过长

30 - 无法进行有效的翻译

40 - 不支持的语言类型

50 - 无效的key


例子

 代码如下 复制代码

$url = "http://fanyi.youdao.com/openapi.do?keyfrom=xujiangtao&key=1490852988&type=data&doctype=json&version=1.1&q=".$content; 
$list = file_get_contents($url);  www.111cn.net
$js_de = json_decode($list,true); 

注意:
使用API key 时,请求频率限制为每小时1000次,超过限制会被封禁。
如果您的应用确实需要超过每小时1000次请求,请与 translate-service@corp.youdao.com 联系。 并提供您的应用的详细信息(名称、功能、网站地址、使用API的方式、API key、预计访问频率、是否商业行为、截屏等等) 以及该应用访问有道翻译API时所使用的服务器IP,审核通过后可放宽访问限制。

WebQQ协议更新后,原登陆算法等信息改变,导致很多盆友无法正常登陆,本站发布了一些与WebQQ最新登陆协议相关的文章,有因为未发布Demo,一些盆友会加Q来问,是否适应最新的WebQQ,小编就做了一个小的Demo来供大家测试。

声明

1、本Demo做的比较简单,未对密码及验证码等对错做验证,只是做登陆演示。

2、QQ是个比较隐私的东西,那么请您用测试号登陆本软件,先小人后君子吧。

本站与最新WebQQ登陆协议相关文章

WebQQ二次登陆失败{“retcode”:103,”errmsg”:”"}

解决办法

重新抓了一次包,发现现在WebQQ将登陆加入SSL层也就是Https在第一次登陆的时候,返回的数据如下:

 代码如下 复制代码

ptuiCB('0','0','http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=你的QQ号&service=login&nodirect=0&ptsig=一串加密数据s_url=http%3a%2f%2fweb2.qq.com%2floginproxy.html%3flogin2qq%3d1%26webqq%5ftype%3d10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0','0','登录成功!', 'I');

上述数据中包含一个回调地址:

 代码如下 复制代码

<a href="http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin">http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin</a>=你的QQ号&service=login&nodirect=0&ptsig=一串加密数据s_url=http%3a%2f%2fweb2.qq.com%2floginproxy.html%3flogin2qq%3d1%26webqq%5ftype%3d10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0

访问上面的地址(302跳转,注意Cookie的获取),获取到一个Cookie名为p_skey,将这个Cookie在二次登陆的时候,加入到Cookie中即可实现二次登陆。

WebQQ最新登陆协议

1、获取验证码

方法:Get

地址:

 代码如下 复制代码
https://ssl.ptlogin2.qq.com:443/check?uin=958736715&appid=1003903&js_ver=10041&js_type=0&login_sig=Mge3PexTk00li3ipMUlHCzouT0xU*8MU6YkkZsIUo8*zQKRTM2rwPUOFbhbGw1No&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&r=0.9403657828909222

Cookie:提交无。返回ptvfsession或verifysession

2、第一次登陆

方法:Get

地址:

 代码如下 复制代码
https://ssl.ptlogin2.qq.com:443/login?u=【QQ号码】&p=【加密后的密码】&verifycode【验证码】&webqq_type=40&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D40&h=1&ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=3-12-12775&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10041&login_sig=Mge3PexTk00li3ipMUlHCzouT0xU*8MU6YkkZsIUo8*zQKRTM2rwPUOFbhbGw1No

Cookie:提交ptvfsession或verifysession,返回pt2gguin、uin 、skey、ETK、superuin、superkey、supertoken 、ptisp、RK、ptuserinfo、ptcz 、ptcz、airkey、ptwebqq 。

3、第一次登陆成功后返回回调地址

方法:Get

地址:

 代码如下 复制代码
http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=【QQ号码】&service=login&nodirect=0&ptsig=tLfZcSFkHNP57Lg0tPtLM6XLh73XeghnEH3pTFyHCLY_&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D40&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0

Cookie:提交ptvfsession、verifysession、skey、ptcz:、ptwebqq、RK、superkey、supertoken。返回pt2gguin、uin、skey、p_uin、p_skey、pt4_token。

4、第二次登陆

方法:Post

地址:http://d.web2.qq.com/channel/login2

Cookie:提交ptvfsession、verifysession、skey、ptcz:、ptwebqq、RK、superkey、supertoken、p_skey、pt4_token、uin、p_uin、ptui_loginuin。

其他细节本文不再叙述,如果还有其他问题,请自行采取抓包软件,对WebQQ登陆进行抓包,无太大的技术含量,各位看官自行努力。

如果您参照上述两篇文章依然无法解决你的问题 了,那只有检查其它原因了。

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • 关于JavaScript中name的意义冲突示例介绍

    在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • javascript自定义的addClass()方法

    复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
  • JavaScript中的this关键字使用方法总结

    在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
  • 详解javascript数组去重问题

    首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • javascript的事件触发器介绍的实现

    事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • JavaScript中逗号运算符介绍及使用示例

    有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
  • JavaScript学习笔记整理_setTimeout的应用

    下面小编就为大家带来一篇JavaScript学习笔记整理_setTimeout的应用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-03
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • 详解JavaScript操作HTML DOM的基本方式

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
  • vue cli4.0项目引入typescript的方法

    这篇文章主要介绍了vue cli4.0项目引入typescript的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-17
  • ActiveX控件与Javascript之间的交互示例

    1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • JavaScript获取浏览器信息的方法

    Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
  • 学习JavaScript设计模式之装饰者模式

    这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • javascript设计模式之解释器模式详解

    神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
  • 跟我学习javascript的最新标准ES6

    虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24