php提取字符串里所有URL的例子
这篇文章主要介绍了php提取字符串中网站url地址的方法,可通过正则匹配查找并提取出URL地址,需要的朋友可以参考下
$postInfo['answer2'] ='学习php的方法很多,通过搜索引擎可以搜索到很多资料,当然也可以进入PHP二次开发博客学习哦:http://www.111cn.net,一起交流学';
preg_match_all("/http:[\/]{2}[a-z]+[.]{1}[a-z\d\-]+[.]{1}[a-z\d]*[\/]*[A-Za-z\d]*[\/]*[A-Za-z\d]*/",$postInfo['answer2'],$array2); print_r($array2); if(!emptyempty($array2[0])) { foreach ($array2[0] as $k=>$v){ $postInfo['answer2'] = str_replace($array2[0][$k],'',$postInfo['answer2'] ); } }
输出结果:
( [0] => Array ( [0] => http://www.111cn.net ) )本文章为各位介绍一篇关于解决PHP报错ZipArchive library is not enabled异常的方法,希望文章能够对大家有帮助。
今天在Linux底下上传Excel文件时,抛出“ZipArchive library is not enabled” 的异常。而我在本地的windows下的代码则是运行正常的。
原因是:在Linux下没有php_zip.dll这个文件(有也不会起作用的),所以需要重新编译一下php的zip模块。
在Unix/Linux下的解决办法 :
1、依次运行如下命令:
cd /usr/src wget http://pecl.php.net/get/zip (默认会在线下载最新版本的) tar zxvf zip.x.x.tgz (所下载的包名) cd zip-1.x.x /usr/bin/phpize (对应的phpize路径 find / -name phpize 出来结果/usr/bin/phpize) ./configure --with-php-config=/usr/bin/php-config (对应的php-config路径) make make instal
2、查看生成的模块路径(安装完之后,屏幕上会提示zip.so的位置):
cd /usr/lib/php/modules/ (对应的extensions路径 /usr/lib/php/modules/)
3、修改php.ini
增加 extension=zip.so
然后同样在php.ini文件中,将zlib.output_compression = Off 改为 zlib.output_compression = On ;
4、最后再重启一下Apache:./apachectl restart ;
这个针对php的zip模块就安装完成了,能够在php中使用ZipArchive类了。
附:在Windows下的解决办法就比较简单了 :
1、在php.ini文件中,将extension=php_zip.dll前面的分号“;”去除
然后同样在php.ini文件中,将 zlib.output_compression = Off 改为 zlib.output_compression = On ;
2、重启Apache服务器。
SS / ATOM 的格式要产生都很简单, 麻烦的是日期格式的产生(RSS => pubDate, ATOM => created).
发现 PHP Date 有提供这些需要的相关全域变量可以使用:(PHP 5.1.1 以后开始支援这些全域变量)
echo DATE_RSS; // D, d M Y H:i:s O echo DATE_ATOM; // Y-m-d\TH:i:sP echo date(DATE_RSS); // Wed, 23 Apr 2008 19:27:19 +0800 echo date(DATE_ATOM); // 2008-04-23T19:27:38+08:00
如果是 MySQL timestamp/datetime format 直接拉出来的资料, 就可以直接使用:
date(DATE_RSS, ($MYSQL_DATETIME_DATA));
目前支持的日期全域变量有以下:
DATE_ATOM: Atom Atom (example: 2005-08-15T15:52:01+00:00) DATE_COOKIE: HTTP Cookies (example: Monday, 15-Aug-05 15:52:01 UTC) DATE_ISO8601: ISO-8601 (example: 2005-08-15T15:52:01+0000) DATE_RFC822: RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000) DATE_RFC850: RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC) DATE_RFC1036: RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000) DATE_RFC1123: RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000) DATE_RFC2822: RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000) DATE_RFC3339: Same as DATE_ATOM DATE_RSS: RSS (Mon, 15 Aug 2005 15:52:01 +0000) DATE_W3C: World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)
PHP 预定义的日期格式
自 PHP 5.1.1 起定义有以下常量来提供标准日期表达方法,可以用于日期格式函数
echo DATE_RSS; // D, d M Y H:i:s O echo DATE_ATOM; // Y-m-d\TH:i:sP echo date(DATE_RSS); // Wed, 23 Apr 2008 19:27:19 +0800 echo date(DATE_ATOM); // 2008-04-23T19:27:38+08:00
虽然格式简单, 但用PHP内的预定义格式岂不更加方便.
目前PHP所有支持的日期格式:
DATE_ATOM: Atom Atom (example: 2005-08-15T15:52:01+00:00) DATE_COOKIE: HTTP Cookies (example: Monday, 15-Aug-05 15:52:01 UTC) DATE_ISO8601: ISO-8601 (example: 2005-08-15T15:52:01+0000) DATE_RFC822: RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000) DATE_RFC850: RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC) DATE_RFC1036: RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000) DATE_RFC1123: RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000) DATE_RFC2822: RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000) DATE_RFC3339: Same as DATE_ATOM DATE_RSS: RSS (Mon, 15 Aug 2005 15:52:01 +0000) DATE_W3C: World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)
生成rss例子
header("Content-type: application/xml"); //定义header头,以防止chrome内核的浏览器不支持rss订阅,如果不支持就输出xml格式的文件 /** * 查询数据库,获取要输出rss的数据 */ $database = "nameofthedatabase"; $dbconnect = mysql_pconnect(localhost, dbuser, dbpassword); mysql_select_db($database, $dbconnect); $query = "select link, headline, description from `headlines` limit 15"; $result = mysql_query($query, $dbconnect); while ($line = mysql_fetch_assoc($result)) { $return[] = $line; } $now = date("D, d M Y H:i:s T"); $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <rss version=\"2.0\"> <channel> <title>山东道路交通安全网-$lanmu</title> <link>http://sdjtaq.cn/rss</link> <description>Latest 100 articles of $lanmu</description> <pubDate>$now</pubDate> <lastBuildDate>$now</lastBuildDate> <docs>http://someurl.com</docs> <managingEditor>810706080@qq.com</managingEditor> <webMaster>810706080@qq.com</webMaster> "; foreach ($artList as $line) { $date = strtotime($line['add_time']); //将数据库的时间格式化成时间戳 $output .= "<item> \n" . "<title>" . $line['title'] . "</title>\n" . " <link>http://sdjtaq.cn/aq_show_" . $line['id'] . ".html</link>\n" . "<description><![CDATA[" . $line['zhaiyao'] . "]]></description>\n" . "<pubDate>" . date("D, d M Y H:i:s O", $date) . "</pubDate>\n" . "</item>\n"; } $output .= "</channel>\n</rss>"; echo $output;微信公众平台现在有许多的api接口了我们可以利用微信公众平台来实现许多的一些功能,下面来看一个php版本的微信公众平台开发实例。
今天来分享一下开发经验~
微信公众平台提供的接口很简单,先看看消息交互流程:
说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。
下面写个实例,开发微信智能聊天机器人:
1. 注册微信公众平台账号
https://mp.weixin.qq.com/
注: 目前一张身份证只能注册两个账号,账号名称关乎加V认证,请慎重注册。
2. 申请服务器/虚拟主机
没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。
3. 开启开发者模式
微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。
4. 填写接口配置信息
同样是在“高级功能”菜单中配置,需要配置两项参数:
URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.YoonPer.com/weixin/index.php”为例。
TOKEN: 随意填写,用于生成签名,以“YoonPer”为例。
填写完把下面代码保存为index.php并上传至http://www.YoonPer.com/weixin/目录,最后点击“提交”完成验证
<?php
define("TOKEN", "YoonPer"); //TOKEN值
$wechatObj = new wechat();
$wechatObj->valid();
class wechat {
public function valid() {
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ) {
return true;
} else {
return false;
}
}
}
?>
这玩意儿就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了,有兴趣的童鞋可以查看官方文档。
微信公众平台API文档:
http://mp.weixin.qq.com/wiki/index.php
5. 开发微信公众平台功能
OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:
当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:
<xml>
<!--开发者微信号-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--发送方帐号(OpenID)-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--消息内容-->
<Content><![CDATA[content]]></Content>
<!--消息ID (64位整型)-->
<MsgId>1234567890123456</MsgId>
</xml>
开发者在处理完消息后需要返回数据给微信服务器:
<xml>
<!--接收方帐号(OpenID)-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--开发者微信号-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--回复消息内容-->
<Content><![CDATA[content]]></Content>
<!--星标操作(位0x0001被标志时 星标刚收到的消息)-->
<FuncFlag>0</FuncFlag>
</xml>
除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。
来看看官方提供的一个PHP示例,我做了一些精简:
<?php
$wechatObj = new wechat();
$wechatObj->responseMsg();
class wechat {
public function responseMsg() {
//---------- 接 收 数 据 ---------- //
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据
//用SimpleXML解析POST过来的XML数据
$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
$toUsername = $postObj->ToUserName; //获取接收方账号
$keyword = trim($postObj->Content); //获取消息内容
$time = time(); //获取当前时间戳
//---------- 返 回 数 据 ---------- //
//返回消息模板
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
$msgType = "text"; //消息类型
$contentStr = 'http://www.YoonPer.com'; //返回消息内容
//格式化消息模板
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,
$time,$msgType,$contentStr);
echo $resultStr; //输出结果
}
}
?>
把代码保存为index.php并上传至http://www.YoonPer.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。
现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.YoonPer.com”的消息。
接下来需要做的就是根据用户消息动态返回结果~
SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码(2014.07.28更新):
<?php
function simsimi ($keyword)
{
$keyword = urlencode($keyword);
//----------- 获取COOKIE ----------//
$url = "http://www.simsimi.com/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
list($header, $body) = explode("\r\n\r\n", $content);
preg_match_all("/set\-cookie:([^\r\n]*);/iU", $header, $matches);
$cookie = implode(';', $matches[1]).";simsimi_uid=1;";
curl_close($ch);
//----------- 抓 取 回 复 ----------//
$url = "http://www.simsimi.com/func/reqN?lc=ch&ft=0.0&req=$keyword&fl=http%3A%2F%2Fwww.simsimi.com%2Ftalk.htm";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$content = json_decode(curl_exec($ch), 1);
curl_close($ch);
if ( $content['result'] == '200' ) {
return $content['sentence_resp'];
} else {
return '我还不会回答这个问题...';
}
}
?>
把上面两段代码整合在一起就大功告成了,需要说明一点,微信服务器在5秒内收不到响应会断掉连接,通过此接口有可能会超时,且SimSimi已经屏蔽了BAE和SAE上的抓取请求,推荐使用SimSimi官方收费API,速度比较快~
php内设的删除空白的函数!感觉不怎么的好使用。找了网上的代码。非常的好使用。查看源码的时候所有空白都是去除的。使用方法很简单。直接使用写入要替换的变量就OK了。
<?php
function trimall($str)//删除空格
{
$qian=array(" "," ","\t","\n","\r");$hou=array("","","","","");
return str_replace($qian,$hou,$str);
}
通过php自带的函数
<?php
/*
trim 去除一个字符串两端空格,
rtrim 是去除一个字符串右部空格,
ltrim 是去除一个字符串左部空格。
*/
?>
<?php
echo trim(" 空格 ")."<br>";
echo rtrim(" 空格 ")."<br>";
echo ltrim(" 空格 ")."<br>";
?>
例子
<?php
$str=" 去除前后空格 ";
echo "方括号中为原始字符串:[".$str."]<br>";
echo "原始字符串长度:".strlen($str)."<br>";
$str1=ltrim($str);
echo "执行ltrim()之后的长度:".strlen($str1)."<br>";
$str2=rtrim($str);
echo "执行rtrim()之后的长度:".strlen($str2)."<br>";
$str3=trim($str);
echo "执行trim()之后的长度:".strlen($str3)."<br>";
echo "去掉首尾空格之后的字符串:[".$str3."]";
?>
相关文章
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
- 本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
- 这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
- JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
- 这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- 文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
- 这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
- 这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 在网站开发中,我们经常使用php similar text 计算两个字符串相似度;1,similar_text的用法 如果我想计算"ly89cn"和"ly89"的相似程度,有两种表示方法复制代码 代码如下: echo similar_text('ly89cn', 'ly89'); ...2015-11-08