作者:matrix
发布时间:2014-03-29
分类:兼容并蓄 零零星星
charCodeAt()函数方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
JavaScript里经常看到charCodeAt函数但有些时候需要转换为php,这下就哦豁了。php里没有这玩意~ 自己写又搞不来。
还好,网上有一大把的代码:
function get_bianma($str)//等同于js的charCodeAt()
{
$result = array();
for($i = 0, $l = mb_strlen($str, 'utf-8');$i < $l;++$i)
{
$result[] = uniord(mb_substr($str, $i, 1, 'utf-8'));
}
return join(",", $result);
}
function uniord($str, $from_encoding = false)
{
$from_encoding = $from_encoding ? $from_encoding : 'UTF-8';
if (strlen($str) == 1)
return ord($str);
$str = mb_convert_encoding($str, 'UCS-4BE', $from_encoding);
$tmp = unpack('N', $str);
return $tmp[1];
}
说明:
get_bianma(substr($f, $e, 1))等同于js代码$f.charCodeAt($e)
表示获取$f中的第$e个位置的字符的 Unicode 编码
作者:matrix
发布时间:2014-03-09
分类:零零星星
获取1.txt 2.txt 3.txt这三个文本文档里面每行的内容,并且打乱顺序输出。
$array=file('1.txt');
$array2=file('2.txt');
$array3=file('3.txt');
for($i=2;$i<4;$i++){
$ass = "array".$i;
$ac = $$ass;
$as=count($$ass);
for($s=0;$s<$as;$s++){
$cs=count($array);
$array[$cs]=$ac[$s];
}
}
//var_dump($array);
shuffle($array);//随机排列数组
//print_r($array);
echo implode("</br>",$array);
说明:
上面的代码放在php文件的<?php和?>标签之中。
txt和php文件放在同一目录。
作者:matrix
发布时间:2014-01-29
分类:Wordpress 零零星星
此功能可以由WP keyword Link Plugin插件实现的,不过要非插件化只有另找。
网上一大把代码我这都不能用。不知道为何。
像豆腐君扒的代码,真心没法用。幸好懂点正则。自己慢慢改。
改的时候发现网上的代码跟WP keyword Link Plugin插件的wp_keywordlink.php部分有9成相似。参照wp_keywordlink.php那该好多了。
代码:
/**
* TAG Category自动添加链接 by 不懂. 20140129 修改
*/
add_filter('the_content', 'Category_tag_link', 1);
function tag_sort($a, $b)
{
if ($a->name == $b->name) return 0;
return (strlen($a->name) > strlen($b->name)) ? -1 : 1;
}
function Category_tag_link($content)
{
/**
* --------------------------------------配置处--------------------------------------------
*/
$match_num_from = 1; //配置:一个关键字少于多少不替换
$match_num_to = 2; //配置:一个关键字最多替换,建议不大于2
$case = true ? "i" : ""; //配置:忽略大小写 true是开,false是关
$get_the_category=is_array(get_the_category())?get_the_category():array();
$get_the_tags=is_array(get_the_tags())?get_the_tags():array();
$posttags = array_merge($get_the_tags, $get_the_category); //合并TAG & CAT数组 (array)强制转换数组,防止报错
if ($posttags)
{
usort($posttags, "tag_sort"); //重新排序 回调函数tag_sort
foreach($posttags as $tag)
{
$link = $tag->category_count ? esc_url(get_category_link($tag->term_id)) : esc_url(get_tag_link($tag->term_id)); //TAG & CAT 合并URL
$keyword = $tag->name; //TAG name
$cleankeyword = stripslashes($keyword);
$url = "<a href=\"$link\" title=\"" . str_replace('%s', addcslashes($cleankeyword, '$'), __('View all posts in %s')) . "\""; //查看 %s 中的全部文章。__()函数WordPress本地化翻译。
$url .= 'target="_blank"';
$url .= ">" . addcslashes($cleankeyword, '$') . "</a>";
$limit = rand($match_num_from, $match_num_to);
$ex_word = preg_quote($cleankeyword, '\'');
$content = preg_replace("'(<a[^>]+>)(.*)($ex_word)(.*)(</a[^>]*>)'U" . $case, '$1$2*&%*$4$5', $content); //a标签,免混淆处理
$content = preg_replace('|(<img)(.*?)(' . $ex_word . ')(.*?)(>)|U' . $case, '$1$2*&%*$4$5', $content); //img标签
$cleankeyword = preg_quote($cleankeyword, '\'');
$regEx = '"(?!((<.*?)|(<a.*?)))(' . $cleankeyword . ')(?!(([^<>]*?)>)|([^>]*?</a>))"s' . $case; //正则匹配
$content = preg_replace($regEx, $url, $content, $limit);
$content = str_replace('*&%*', stripslashes($ex_word), $content); //免混淆还原处理
}
}
return $content;
}
说明:代码放到WordPress主题functions.php文件的?>前面。
配置信息在15-17行处。
此版本增加Category(文章分类)链接,忽略大小写功能。比网上传的好点。哈哈。ok 丢掉WP keyword Link Plugin
示例见本站任意文章页面。或者这里:免插件
不方便copy的php下载地址:
http://www.400gb.com/file/55854122
折腾完觉得正则真TM牛逼。好菜鸟啊
记:
遇到Warning : preg_replace() [function.preg-replace ]: Unknown modifier 'a'这类问题。实质是正则的边界符没弄好的缘故。
一般的边界符号是用 | 或者 /,是在开头和结尾出现的。然而正则表达式里也出现了边界符,系统会把它当做边界,这样边界后面出现的以a开头的不明字符串就会成为正则修正符,自然是不会别识别的。也就导致报错。
错误例:
$content = preg_replace("/(<a[^>]+>)(.)($ex_word)(.)(</a[^>]>)/U" . $case, '$1$2&%*$4$5', $content);
改成:/(<a[^>]+>)(.)($ex_word)(.)(<\/a[^>]*>)/U
|(<a[^>]+>)(.)($ex_word)(.)(</a[^>]*>)|U
'(<a[^>]+>)(.)($ex_word)(.)(</a[^>]*>)'U
都ok啦。边界符也不是固定的,'、"照样可以用。
Warning: array_merge() [function.array-merge]: Argument #1报错, array_merge()的参数不是数组就会导致此类ERROR。
可在参数前面加(array)来强制转换为数组,建议在 array_merge() 前判断是否为数组,否则以空数组输出到array_merge()中解决。
正则入门级教程:http://www.oschina.net/question/12_9507 很实用的~
正则表达式 问号 冒号 ?:使用 http://blog.csdn.net/hoping23/article/details/8479700
php正则表达式中的修正符说明:http://blog.csdn.net/taipingliebeiluo/article/details/5872878
WordPress中的()和_e()函数的作用:http://demon.tw/software/wordpress--_e.html
零宽断言:http://jjdoor.blog.163.com/blog/static/184780342012318917389/
参考:http://bbs.csdn.net/topics/90492431
http://blog.csdn.net/sunking18/article/details/6415705
作者:matrix
发布时间:2014-01-13
分类:零零星星
之前获取令牌都是手动提交提交表单后复制的access token
<form action="https://oauth.api.189.cn/emp/oauth2/v2/access_token" method="post">
<p> 接口: action="https://oauth.api.189.cn/emp/oauth2/v2/access_token" method="post" <br>
grant_type:
<input type="text" name="grant_type" value="client_credentials" size="40">授权模式,响应类型<br>
App Id:<input type="text" name="app_id" value="41300000000002185" size="40">应用在天翼开放平台平台上的唯一标识,在应用注册时分配<br>
App Secret:<input type="text" name="app_secret" value="3d2083dbf75ae30000000003d" size="40">天翼开放平台颁发给应用的密钥信息<br>
state:<input type="text" name="state" value="www.hhtjim.com" size="40"><br>
scope:<input type="text" name="scope" size="40"><br>
<br>
<input type="submit" value="点击获取令牌">
</p>
</form>
以前也试过用curl模拟提交,可是都失败。现在不用那么傻了,用下面php代码解决。
$ai='4500000000000000000000000001345';
$as='1ab91560000000000000d33b3e6bgh4';
$post=array('Host: '=>'oauth.api.189.cn');
$url="https://oauth.api.189.cn/emp/oauth2/v2/access_token?grant_type=client_credentials&app_id=$ai&app_secret=$as";
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$get_url = curl_exec($ch);
curl_close($ch);
$obj=json_decode($get_url);
echo $obj->access_token;
现在看来,原来如此。
代码说明:
1、2行代表你天翼云app的app_id和app_secret
模式:client_credentials
附:
类似的Php代码: Php获取Token.php
作者:matrix
发布时间:2014-01-12
分类:零零星星
美化php代码较为麻烦,没有像js那样的方便。目前就找到这个方法能用到。
需要准备EditPlus以及其插件phpCB。
EditPlus 代码编辑的软件(貌似EditPlus 的可扩展性非常强)
百度网盘:http://pan.baidu.com/s/1hqwrR5i
pc6:http://www.pc6.com/softview/SoftView_36775.html
EditPlus 的插件phpCodeBeautifie。
百度网盘:http://pan.baidu.com/s/1gd63rUV
官方页 :http://www.waterproof.fr/products/phpCodeBeautifier/download.php
安装EditPlus之后找到菜单栏:
阅读剩余部分 »
作者:matrix
发布时间:2014-01-06
分类:零零星星
应小伙伴的留言放出源码,并考虑多文件的情况。
这代码弄了好几天才搞出来的,100多行不容易。 🙄
本人菜鸟,代码上有问题的地方欢迎指正 互相学习!! 爱好php~
版本说明:
大于100MB,有提取密码的文件外链会失败。
放到BAE上不知道啥原因 总是403 503 错误,不过我在本地测试是成功的。其他未知
解决:
bae 403错误,正如Lostape所说,正则匹配的问题。
preg_match('|\.php\??\/(.*)\.\w+|',$_SERVER["REQUEST_URI"],$ur);
大部分的bae 503错误,应该是有太长的& or ?& 导致的。具体不详
更多BUG中~
使用说明:
微云:http://share.weiyun.com/eec279cd08578598b84e92403b3d5e99
普通下载:http://localHOST/weiyun.php/eec279cd08578598b84e92403b3d5e99.flv
BAE调用下载:http://ฏ๎๎๎๎๎๎๎๎๎ฏ ้้้ฏด้้้้้็็็็็้้้้้็็.duapp.com/t.php?/eec279cd08578598b84e92403b3d5e99.flv(尝试兼容bae)
http://ฏ๎๎๎๎๎๎๎๎๎ฏ ้้้ฏด้้้้้็็็็็้้้้้็็.duapp.com/t.php?u=eec279cd08578598b84e92403b3d5e99(再度尝试兼容bae)
技术问题,BAE上常出现503错误。不保证绝对可用,欢迎测试!!
源码(已失效):
http://pan.baidu.com/s/1c05TCK4 #密码: kh0e(再度尝试兼容bae)
http://pan.baidu.com/s/1jGt6bSa #密码: t5t1 (尝试兼容bae)
http://pan.baidu.com/s/1EeYiq%20 #密码:32my
再来mp3测试: 阅读剩余部分 »
作者:matrix
发布时间:2013-12-31
分类:零零星星
仅是获得响应头Location的最终地址
$url='http://189.io/G3qrdn';
echo get_jump_url($url);
function get_jump_url($url) {
$url = str_replace(' ','',$url);
do {//do.while循环:先执行一次,判断后再是否循环
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$header = curl_exec($curl);
curl_close($curl);
preg_match('|Location:\s(.*?)\s|',$header,$tdl);
if(strpos($header,"Location:")){
$url=$tdl ? $tdl[1] : null ;
}
else{
return $url.'';
break;
}
}while(true);
}
参考:http://bbs.csdn.net/topics/390349430
附curl常量:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);//允许链接自动跳转
curl_setopt($curl, CURLOPT_MAXREDIRS, 3);//限定CURLOPT_FOLLOWLOCATION递归返回的数量
CURLOPT_AUTOREFERER :curl 会自动添加 Referer header 在每一个跳转链接,也就是一跟到底。
这样也就避免上面代码的do while循环。
建议使用get_headers()函数解决
参考:http://upc.gg.blog.163.com/blog/static/297984982013123970455/
作者:matrix
发布时间:2013-12-04
分类:兼容并蓄 零零星星
测试地址:
采用最新的本人无数据库缓存10min,绝对不靠谱,仅供测试!
警告:以下内容属于充字数类型且杂乱无章,需要外链功能的请戳上面的地址~
上个月,百度网添加了验证码功能导致以前抓取外链的方法都失效。度娘终于爆发了~
刚开始还没注意到验证码的存在,只要一连几次下载文件就会出现验证码窗口
经过N次的文件下载,看到了度娘的脾气。
也就只允许你前3次下载免验证码,后面你要下载的话那就只有手动输入了。
抓到某个下载地址:
http://small.cdn.baidupcs.com/file/2c808f328bec8fa44d5ac5e2e42985d2?xcode=e0ad680ebd95ea801d4878451d04d36328f07d27337bcbfd0b2977702d3e6764
&fid=1178024267-250528-2238604782
&time=1386087754
&sign=FDTAXER-DCb740ccc5511e5e8fedcff06b081203-w%2FMs%2B2m13ixmrRpD2s11F01H6b4%3D
&to=sc
&fm=Q,B,U,nc
&expires=1386088354
&rt=sh
&r=860261331
&logid=2869754983&sh=1&vuk=3238236832
&fn=文件名
上面的fid、time、sign还能从页面处找到,有些参数根本就看不到。
time和expires参数都是unix时间戳,后者的意思是过期时间。时间相差600秒,也就10分钟。
在这10分钟之内这个地址都是有效的, 😉 那就有点头绪了。
抓取页面的必备参数,获取下载地址,再用session会话缓存那个下载地址,10分钟内有效或者再自动检测。
最爽的是第一次弄免数据库缓存,庆幸书上有session会话的相关章节 哈哈。
再手动下载几次就抓到了获取下载地址的URL:
http://pan.baidu.com/share/download?bdstoken=null&uk=&shareid=&fid_list=[]&sign=×tamp=
看到那几个参数,笑了~
之后就是好几天的编写、测试下载,期间有看书整了个最基本的类 。 额 面向对象 。
源码就暂时为空。
提醒的是度娘这回要检测referer,跟360云盘一样的只能外链下载无法外链播放。自己试试就晓得~
所以我把link.hhtjim.com页面的那个下载按钮去掉了 ,TMD浏览器发送当前URl的referer是没法改的。无语啊~
先放个测试期间最早版本的cookies缓存源码:
<?php
error_reporting(0);//禁用错误报告
function curl_get($url,$post=false,$carry_header=true,$REFERER_=false,$useragent=false,$add_arry_header=null){
$ch=curl_init($url);
if($carry_header){
curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent:Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16'));
}
if($add_arry_header){
curl_setopt($ch, CURLOPT_HTTPHEADER, $add_arry_header);
}
if ($post) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
if($REFERER_){
curl_setopt($ch, CURLOPT_REFERER,$REFERER_);
}
if($useragent){
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$get_url = curl_exec($ch);
curl_close($ch);
return $get_url;
}
preg_match('|u=(.*)|',$_SERVER["REQUEST_URI"],$bai_res);
$bai_=curl_get($bai_res[1]);
preg_match('|shareid=\"(\d+)\"\?\"\1\":\"\";FileUtils\.uk=\"(\d+)\"\?\"\2\"|',$bai_, $ui);
preg_match('|fs_id\D+(\d+)\D+app_id|',$bai_,$fid);
preg_match('|timestamp=\"(\d+)\"|',$bai_,$time);
preg_match('|downloadsign=\"(\w+)\"|',$bai_,$login);
$diz="http://pan.baidu.com/share/download?bdstoken=null&uk=$ui[2]&shareid=$ui[1]&fid_list=[$fid[1]]&sign=$login[1]×tamp=$time[1]&bdstoken=null&channel=chunlei&clienttype=0&web=1";
$header[]= 'Cookie: BAIDUID=*****'; //请使用自个儿的百度ID,度娘会检查这个的cookies
if(isset($_COOKIE["du$ui[2]-$ui[1]"])){
//header( "Location: $_COOKIE["du$ui[2]-$ui[1]"]");
echo $_COOKIE["du$ui[2]-$ui[1]"];
}else{
$dl=curl_get($diz,null,$header,$bai_res[1],null,$header);
$obj=json_decode($dl,true);
if($obj['errno']!='0'){
//header( "Location: $bai_res[1]");
echo $bai_res[1];
}
setcookie("du$ui[2]-$ui[1]",$obj['dlink'],time()+3600*24);
//header( "Location: $obj['dlink']");
echo $obj['dlink'];
}
?>
这个能不能用就靠你怎么使了,仅是原理。
如果你即刻需要外链,请到http://link.hhtjim.com玩玩~
祝你好运!
博客也快一个月都没有更新了,不码点字不好~
- 1
- 2
- 3
- 4
- 5
- 6