PHP 清理字符串中所有无用标签

 更新时间:2016年11月25日 17:23  点击:2053
很多时候需要输出一些 “纯” 字符串,也就是去除任何杂质(例如 Html 标签、空格之类的文本),输出的摘要就是如此,下面的这个函数可以帮你实现着一点:


例子

 代码如下 复制代码

function Bing_string_cleanr( $string ){
 $string = trim( $string );
 $string = strip_tags( $string );
 $string = htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' );
 $string = str_replace( "n", "", $string );
 $string = trim( $string );
 return $string;
}

使用方法:

 

 代码如下 复制代码
echo Bing_string_cleanr( '内 容 <br> <html> asdfeiuonsdfje' );

删除空白

 代码如下 复制代码

<?php
$str = " This line containstliberal rn use of whitespace.nn";

// First remove the leading/trailing whitespace
//去掉开始和结束的空白
$str = trim($str);

// Now remove any doubled-up whitespace
//去掉跟随别的挤在一块的空白
$str = preg_replace('/s(?=s)/', '', $str);

// Finally, replace any non-space whitespace, with a space
//最后,去掉非space 的空白,用一个空格代替
$str = preg_replace('/[nrt]/', ' ', $str);

// Echo out: 'This line contains liberal use of whitespace.'
echo "<pre>{$str}</pre>";
?>

关注微信公众之后发送回复地理位置信息,即可回复周边附近的酒店信息列表,下面我就来给各位介绍利用php是怎么实现这个功能,希望全子对大家有帮助。
效果图:
严佳冬

并且附加上代码:

 代码如下 复制代码

<?php
 //将提交过来的信息接收
 
$signature = $_GET['signature'];
 
 $timestamp = $_GET['timestamp'];
 
 $nonce = $_GET['nonce'];
 
 $echostr = $_GET['echostr'];
 
 $token = "yanjiadong";
 
 //判断接入网站
 
 //进行字典排序
 $arr = array($token,$timestamp,$nonce);
 
 sort($arr);
 
 //完成字符串的拼接和sha1加密
 
 $result = sha1(join($arr));
 
 //判断生成的字符串和$signature是否相等,如果相等,直接输出$echostr,这样网站接入成功
 
 if($result==$signature){
 
 echo $echostr;
 
 }
 
 //接收微信公众账号接收到的信息
 $poststr = $GLOBALS["HTTP_RAW_POST_DATA"];
 
 $xmlObj = simplexml_load_string($poststr,'SimpleXMLElement',LIBXML_NOCDATA);
 
 $ToUserName = $xmlObj->ToUserName;
 
 $FromUserName = $xmlObj->FromUserName;
 
 $CreateTime = $xmlObj->CreateTime;
 
 $MsgType = $xmlObj->MsgType;
 
 $Content = $xmlObj->Content;
 
&nbsp;
 if($MsgType=='location'){
 
 $Location_X = $xmlObj->Location_X;
 
 $Location_Y = $xmlObj->Location_Y;
 
 $Scale = $xmlObj->Scale;
 
 $Label = $xmlObj->Label;
 
 $urlstr = "http://api.map.baidu.com/place/v2/search?&query=酒店&location=".$Location_X.",".$Location_Y."&radius=5000&output=json&ak=DESY8unmZnUlLB0mlowjuiRr";  //此处ak参数需要个人的百度开发序列号,自己去百度申请下就好了
 
 $jsonstr = file_get_contents($urlstr);
 
 $json = json_decode($jsonstr,true);
 
 $pic_640 = "http://api.map.baidu.com/staticimage?width=640&height=320&center=".$Location_Y.",".$Location_X."&zoom=15&markers=".$Location_Y.",".$Location_X."&markerStyles=l,";
 
 $pic_80 = "http://api.map.baidu.com/staticimage?width=80&height=80&center=".$Location_Y.",".$Location_X."&zoom=15&markers=".$Location_Y.",".$Location_X."&markerStyles=l,";
 
 $p_640 = file_get_contents($pic_640);
 
 file_put_contents('./images/640_'.$FromUserName.".png",$p_640);
 
 $p_80 = file_get_contents($pic_80);
 
 file_put_contents('./images/80_'.$FromUserName.".png",$p_80);
 
 echo pic_send($json['results']);
 
 }
 function pic_send($arr){
 global $ToUserName,$FromUserName;
 $str = "<xml>
 <ToUserName><![CDATA[".$FromUserName."]]></ToUserName>
 <FromUserName><![CDATA[".$ToUserName."]]></FromUserName>
 <CreateTime>".time()."</CreateTime>
 <MsgType><![CDATA[news]]></MsgType>
 <ArticleCount>".count($arr)."</ArticleCount>
 <Articles>";
 foreach($arr as $k=>$v){
 if($k==0){
 $picurl = "http://yanjiadong.net/weixin/images/640_".$FromUserName.".png";
 }else{
 $picurl = "http://yanjiadong.net/weixin/images/80_".$FromUserName.".png";
 }
 $str .="
 <item>
 <Title><![CDATA[".$v['name']." 地址:".$v['address']." 电话:".$v['telephone']."]]></Title>
 <Description><![CDATA[".$v['name']." 地址:".$v['address']." 电话:".$v['telephone']."]]></Description>
 <PicUrl><![CDATA[".$picurl."]]></PicUrl>
 <Url><![CDATA[http://api.map.baidu.com/place/detail?uid=".$v['uid']."&output=html&src=".$v['name']."&output=html]]></Url>
 </item>";
 }
 
 $str .= "</Articles></xml>";
 
 return $str;
 }
 
?>

开发微信公众平台消息接口过程中,我们首先需要验证消息接口的有效性,验证通过后,才可以进行其他开发。首先我们来看一下微信公众平台给我的 PHP SDK

1、需要设置一个 TOKEN 信息

 代码如下 复制代码

efine("TOKEN", "weixin");

这个 TOKEN 信息可以由开发者自行设定。
2、有个 wechatCallbackapiTest 类,该类中含有3个方法:valid、responseMsg、checkSignature,其中方法valid、checkSignature是用作验证接口URL有效性用的,responseMsg是我们使用最多的方法,后续大部分的开发工作都会在这里完成。

在我们对接口进行有效性验证通过后,就不再需要进行验证了,这时我们就需要使用到 responseMsg 方法。那么如何保证接口验证通过后,不需要去切换其中的方法或修改其中的代码呢?

我是这样做的:

 代码如下 复制代码

public function indexAction()
{
 if(isset($_GET['echostr']))
 {
  $echoStr = $_GET["echostr"];

  //valid signature , option
  if($this->checkSignatureAction())
  {
   echo $echoStr;
   exit;
  }
 }
 else
 {
  $this->responseMsgAction();
 }

 return FALSE;
}

讲解一下:

因为在验证接口有效性时传递了个 echostr 参数,而在消息接口响应过程中没有这个参数,所有我们这里用这个参数来判断是验证接口还是接口响应:

 代码如下 复制代码

isset($_GET['echostr'])

因为公司要做一个项目活动在微信中要有这一样款游戏活动了,但自己不会写于是网上找到了一个作者写的方案下面我整理了一下可以用同时也分享给大家。

本来是不想写这篇博文的,但又怕网友被坑,我还是写一下。

下载 jquery扩展wScratchPad.js, 原站的页面打不开,我这里提供一个下载地址 http://file.111cn.net/upload/2014/4/wScratchPad-1.4.4.zip
然后(冷静),一些没节操的博主,直接转别人的文章,验证的过程都省了,应该坑了不是小白。我这里修正一下

在这个扩展里面,怎么才能过去用户的刮开的面积

$("#wScratchPad3").wScratchPad({
 cursor:'',  //设置鼠标的样式
 color:'gray' ,  //设置覆盖物的颜色,跟image2功能相斥
 width:"300",
 height:"100",
 image: "" //顶部的图片
// 更多配置相关的选项请看源码
 scratchUp: function(e, percent){
 if(percent > 60)
 {
 alert("sss");
 }
 }
 });

从上面的代码,看的出来,这个跟网上所谓的教程不一样,这里获取刮开的范围用到函数不是

scratchMove()
而是
scratchUp()

为嘛?看源码

 
scratchFunc: function(e, $this, event)
        {
            e.pageX = Math.floor(e.pageX - $this.canvas_offset.left);
            e.pageY = Math.floor(e.pageY - $this.canvas_offset.top);
 
            $this['scratch' + event](e, $this);
 
            if(this.settings.realtimePercent || event == "Up") {
                if($this.settings['scratch' + event]) $this.settings['scratch' + event].apply($this, [e, $this.scratchPercentage($this)]);
            }
        }

这里这个获取函数绑定的UP 而不是move
注意这里的wScratchPad是1.4.4最新版。

最近,一个项目要求做交通银行在线支付,ecshop本身没有这方面的接口,于是通过一些时间的专研,做了一个插件出来。有好的东西,当然要分享,在此特地分享出来,希望能够帮助到跟我一样有需要的人,为大家减轻一下开发的负担,也多请大家指出一些好的方法和建议,相互的学习、进步!

在使用插件之前,请配置好交通银行在线支付的环境(具体安装方法,交行提供的demo会有,也不是很难,注意好细节就行)。安装好之后,请将includes文件夹和languages文件夹拷贝到ecshop站点的根目录覆盖(最下面有源码下载),最后进入后台的支付模块安装即可。


以下是调用的范例:

 代码如下 复制代码


include_once(ROOT_PATH . 'includes/modules/payment/bankcomm.php');

$order_['orderid'] = $order['order_sn'];

$order_['amount'] = $order['yd_price'];

$order_['orderMono'] = '测试'; //商家备注

$order_['goodsURL'] = "http://".$_SERVER['HTTP_HOST'].'/respond.php?code=bankcomm'; //取货URL

$pay_code = new bankcomm;

$pay_button = $pay_code->get_code($order_);

$order['pay_button'] = $pay_button; //即此时已经生成了一个支付按钮


源码(includes/modules/payment/bankcomm.php):

 

 代码如下 复制代码

<?php


/**

 * 交通银行在线支付插件 For Ecshop

 * Author: Reson

 * Date: 2014/03/31

 */


if (!defined('IN_ECS'))

{

die('Hacking attempt');

}


$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/bankcomm.php';


if (file_exists($payment_lang))

{

global $_LANG;

include_once($payment_lang);

}


/* 模块的基本信息 */

if (isset($set_modules) && $set_modules == TRUE)

{

$i = isset($modules) ? count($modules) : 0;


/* 代码 */

$modules[$i]['code']    = basename(__FILE__, '.php');


/* 描述对应的语言项 */

$modules[$i]['desc']    = 'bankcomm_desc';


/* 是否支持货到付款 */

$modules[$i]['is_cod']  = '0';


/* 是否支持在线支付 */

$modules[$i]['is_online']  = '1';


/* 支付费用,由配送决定 */

$modules[$i]['pay_fee'] = '0';


/* 作者 */

$modules[$i]['author']  = 'Reson';


/* 网址 */

$modules[$i]['website'] = 'http://www.daixiaorui.com';


/* 版本号 */

$modules[$i]['version'] = '1.0.0.0';


/* 配置信息 */

$modules[$i]['config']  = array();

return;

}


/**

 * 类

 */

class bankcomm

{

/**

* 构造函数

*

* @return void

*/

function bankcomm()

{

}


function __construct()

{

$this->bankcomm();

}


/**

* 提交函数

*/

function get_code($order)

{

//获得表单传过来的数据

$param['interfaceVersion'] = '1.0.0.0'; //消息版本号*

$param['merID'] = '301310063009501'; //商户号 (测试号,后期可自行更改)

$param['orderid'] = $order['orderid']; //订单号*

$param['orderDate'] = local_date("Ymd",gmtime()); //商户订单日期* yyyyMMdd

$param['orderTime'] = local_date("His",gmtime()); //商户订单时间* HHmmss

$param['tranType'] = 0; //交易类别* 0:B2C

$param['amount'] = $order['amount']; //订单金额*

$param['curType'] = 'CNY'; //交易币种* 默认CNY

$param['orderContent'] = '';

$param['orderMono'] = $order['orderMono']; //商家备注

$param['phdFlag'] = ''; //物流配送标志

$param['notifyType'] = 1; //通知方式* 1 通知

$param['merURL'] = ''; 

$param['goodsURL'] = $order['goodsURL']; //取货URL

$param['jumpSeconds'] = '';

$param['payBatchNo'] = '';

$param['proxyMerName'] = '';

$param['proxyMerType'] = '';

$param['proxyMerCredentials'] = '';

$param['netType'] = 0; //渠道编号* 0:html渠道

$param['issBankNo'] = '';

$tranCode = "cb2200_sign";


htmlentities($param['orderMono'],"ENT_QUOTES","utf-8");

//连接字符串

$source = '';

foreach($param as $key=>$val){

if($key != 'issBankNo')

$source .= $val.'|';

}

$source = substr($source,0,strlen($source)-1);


//连接地址 www.111cn.net

$socketUrl = "tcp://127.0.0.1:8080"; //这里的端口根据自己配置的情况

$fp = stream_socket_client($socketUrl, $errno, $errstr, 30);

$retMsg="";

//

if (!$fp) {

echo "$errstr ($errno)<br /> ";

} else

{

$in  = "<?xml version='1.0' encoding='UTF-8'?>";

$in .= "<Message>";

$in .= "<TranCode>".$tranCode."</TranCode>";

$in .= "<MsgContent>".$source."</MsgContent>";

$in .= "</Message>";

fwrite($fp, $in);

while (!feof($fp)) {

$retMsg =$retMsg.fgets($fp, 1024); 

}

fclose($fp);

//解析返回xml

$dom = new DOMDocument;

$dom->loadXML($retMsg);

$retCode = $dom->getElementsByTagName('retCode');

$retCode_value = $retCode->item(0)->nodeValue;

$errMsg = $dom->getElementsByTagName('errMsg');

$errMsg_value = $errMsg->item(0)->nodeValue;

$signMsg = $dom->getElementsByTagName('signMsg');

$signMsg_value = $signMsg->item(0)->nodeValue;

$orderUrl = $dom->getElementsByTagName('orderUrl');

$orderUrl_value = $orderUrl->item(0)->nodeValue;

$MerchID = $dom->getElementsByTagName('MerchID');

$merID = $MerchID->item(0)->nodeValue;

//echo "retMsg=".$retMsg;

//echo $retCode_value." ".$errMsg_value." ".$signMsg_value." ".$orderUrl_value;

if($retCode_value != "0"){

//echo "交易返回码:".$retCode_value."<br>";

//echo "交易错误信息:" .$errMsg_value."<br>";

return "交易错误信息:" .$errMsg_value."<br>";

}else{

$param['signMsg_value'] = $signMsg_value;

$param['orderUrl_value'] = $orderUrl_value;

$form_code = $this->create_html($param); //创建提交表单

return $form_code;

}

}

/**

* 创建提交表单

*/

function create_html($param){

$pay_html ='<form name = "form1" method = "post" action = "'.$param['orderUrl_value'].'">

<input type = "hidden" name = "interfaceVersion" value = "'.$param['interfaceVersion'].'">

<input type = "hidden" name = "merID" value = "'.$param['merID'].'">

<input type = "hidden" name = "orderid" value = "'.$param['orderid'].'">

<input type = "hidden" name = "orderDate" value = "'.$param['orderDate'].'">

<input type = "hidden" name = "orderTime" value = "'.$param['orderTime'].'">

<input type = "hidden" name = "tranType" value = "'.$param['tranType'].'">

<input type = "hidden" name = "amount" value = "'.$param['amount'].'">

<input type = "hidden" name = "curType" value = "'.$param['curType'].'">

<input type = "hidden" name = "orderContent" value = "'.$param['orderContent'].'">

<input type = "hidden" name = "orderMono" value = "'.$param['orderMono'].'">

<input type = "hidden" name = "phdFlag" value = "'.$param['phdFlag'].'">

<input type = "hidden" name = "notifyType" value = "'.$param['notifyType'].'">

<input type = "hidden" name = "merURL" value = "'.$param['merURL'].'">

<input type = "hidden" name = "goodsURL" value = "'.$param['goodsURL'].'">

<input type = "hidden" name = "jumpSeconds" value = "'.$param['jumpSeconds'].'">

<input type = "hidden" name = "payBatchNo" value = "'.$param['payBatchNo'].'">

<input type = "hidden" name = "proxyMerName" value = "'.$param['proxyMerName'].'">

<input type = "hidden" name = "proxyMerType" value = "'.$param['proxyMerType'].'">

<input type = "hidden" name = "proxyMerCredentials" value = "'.$param['proxyMerCredentials'].'">

<input type = "hidden" name = "netType" value = "'.$param['netType'].'">

<input type = "hidden" name = "merSignMsg" value = "'.$param['signMsg_value'].'">

<input type = "hidden" name = "issBankNo" value = "'.$param['issBankNo'].'">

<input type="submit" value=" " class="pay_button" />

</form>';

return $pay_html;

}


/**

* 处理函数

*/

function respond()

$tranCode = "cb2200_verify";

$notifyMsg = $_REQUEST["notifyMsg"];  

$lastIndex = strripos($notifyMsg,"|");

$signMsg = substr($notifyMsg,$lastIndex+1); //签名信息

$srcMsg = substr($notifyMsg,0,$lastIndex+1);//原文

//连接地址

$socketUrl = "tcp://127.0.0.1:8080";

$fp = stream_socket_client($socketUrl, $errno, $errstr, 30);

$retMsg="";

if (!$fp) {

//echo "$errstr ($errno)<br /> ";

return false;

}else{

$in  = "<?xml version='1.0' encoding='UTF-8'?>";

$in .= "<Message>";

$in .= "<TranCode>".$tranCode."</TranCode>";

$in .= "<MsgContent>".$notifyMsg."</MsgContent>";

$in .= "</Message>";

fwrite($fp, $in);

while (!feof($fp)) {

$retMsg =$retMsg.fgets($fp, 1024); 

}

fclose($fp);

//解析返回xml

$dom = new DOMDocument;

$dom->loadXML($retMsg);

$retCode = $dom->getElementsByTagName('retCode');

$retCode_value = $retCode->item(0)->nodeValue;

$errMsg = $dom->getElementsByTagName('errMsg');

$errMsg_value = $errMsg->item(0)->nodeValue;

$signMsg = $dom->getElementsByTagName('signMsg');

$signMsg_value = $signMsg->item(0)->nodeValue;

if($retCode_value != ''){

//echo "交易返回码:".$retCode_value."<br>";

//echo "交易错误信息:" .$errMsg_value."<br>";

return false;

}else{

$arr = preg_split("/|{1,}/",$srcMsg); 

$pay_id = $arr[1];

$action_note = base64_decode($arr[16]);

// 完成订单。

order_paid($pay_id, PS_PAYED, $action_note);

//告诉用户交易完成

return true; 

}

///////////////// respond END ///////////////

}

}


?>


源码(languages/zh_cn/payment/bankcomm.php):


<?php


/**

 * 交通银行语言文件

 * by: Reson www.111cn.net

 * 2014/03/31

 */


global $_LANG;


$_LANG['bankcomm'] = '交通银行在线支付';

$_LANG['bankcomm_desc'] = '交通银行在线支付';

$_LANG['pay_button'] = '交通银行支付';


?>

 原文件址:http://www.daixiaorui.com/read/80.html

原文下载:http://file.111cn.net/upload/2014/4/13962827995368.zip

 

[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • JS创建Tag标签的方法详解

    这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 解决vue字符串换行问题(绝对管用)

    这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25