php中英文字符串长度截取的例子

 更新时间:2016年11月25日 15:42  点击:1969
本例子实现中文截取会使用到php_mbstring.dll扩展了,所以必须在php.ini中把它们面的;号去去掉然后重启一下apache才可以用哦。

使用此方法之前,请在php.ini中开启php_mbstring.dll扩展,将extension前面的;分号去掉即可

很多截取中文字符串的方法,大多不能实现按中文个数来截取所要的字符,
以下代码可以实现:

 代码如下 复制代码

<?php
mb_internal_encoding('UTF-8');
$str = "中文测试chineseTest";

header('content-type:text/html; charset=UTF-8');
echo mb_strlen($str);
echo '<br/>';
echo mb_substr($str,1,6);
?>

输出结果:
15
文测试chi

上面只是测试,下面整理例子。

 代码如下 复制代码

<?php
/*mb_string方法截取字符串长度
* $arr_str 数组或字符串
* $tlen 截取长度
* $fleid 要截取的字段(数组形式)
*/
header('Content-Type: text/html; charset=utf-8');
function interception($arr_str,$tlen,$fleid='') {
//判断是否是数组
if (is_array($arr_str)) {
//将数组下标重新排列
foreach ($arr_str as $key => $val) {
for ($k = 0; $k < count($fleid); $k++) {
$content = $arr_str[$fleid[$k]];
//判断是否大于指定的长度
if (mb_strlen($content,'utf-8') > $tlen) {
$arr_str[$fleid[$k]] = mb_substr($content,0,$tlen,'utf-8').'...';
}
}
}
}
//判断是否是字符串
elseif (is_string($arr_str)) {
if (mb_strlen($arr_str,'utf-8') > $tlen) {
$arr_str = mb_substr($arr_str,0,$tlen,'utf-8').'...';
}
}
return $arr_str;
}
//使用示例
//数组示例
$array = array(
'ha' => '哈尔滨市',
'bei' => '地球中国北京市',
);
//字符串示例
$string = '中国的互联网:商业化很牛,公共服务几乎没有谢文';
$string2 = 'abcdefghijkl';
print_r(interception($array,2,array('ha','bei')));
echo '<br />'.interception($string,5);
echo '<br />'.interception($string2,5);
?>

本文章这里给各位整理了几个非常不错的加密,解密例子,希望这些例子来给你工作带来帮助。

加密就是将一些字符转换为另一个字符串的过程,简单的说就是把大门上锁,并且只有你有开启的钥匙。作为一个程序员都应该有属于自己的加密方式,目前最流行的加密算法就是MD5()加密方式。但是在网站已经有了破解的软件用起来也不是很安全。下面简单的介绍一下自定义的加密函数。

 代码如下 复制代码

“/*加密*/

function addcoder($str)

    {

        $yuan = 'abA!c1dB#ef2@Cg$h%iD_3jkl^E:m}4n.o{&F*p)5q(G-r[sH]6tuIv7w+Jxy8z9K0';

        $jia = 'zAy%0Bx+1C$wDv^Eu2-t3(F{sr&G4q_pH5*on6I)m:l7.Jk]j8K}ih@gf9#ed!cb[a';

       if ( strlen($str) == 0) return false;

for($i = 0;$i<strlen($str);$i++)

        {

            for($j = 0;$j<strlen($yuan);$j++)                         

{

if($str[$i]==$yuan[$j])

                    {

$results.= $jia[$j];

break;

}

            }

        }

       return $results;

    }

 


/*解密*/

function removecoder($str)

{

        $yuan = 'abA!c1dB#ef2@Cg$h%iD_3jkl^E:m}4n.o{&F*p)5q(G-r[sH]6tuIv7w+Jxy8z9K0';

        $jia = 'zAy%0Bx+1C$wDv^Eu2-t3(F{sr&G4q_pH5*on6I)m:l7.Jk]j8K}ih@gf9#ed!cb[a';

       If (strlen($str)==0) return false;

  for($i = 0;$i< strlen($str);$i++)

{

 for($j = 0;$j<strlen($jia);$j++)

  {

  if($str[$i]==$jia[$j]) 

{

$results .= $yuan[$j];

break;

}

  }

}

       return $results;

    }

$str = "www.111cn.net";
echo "加密前:".$str."<br >";
$str1= addcoder($str);
echo "加密后:".$str1."<br >";
$str2= removecoder($str1);
echo "解密后:".$str2."<br >";

例子二,利用md5+base64_encode进行编辑处理。

 代码如下 复制代码

<?php
//www.111cn.net
function passport_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}
function passport_decrypt($txt, $key) {
$txt = passport_key(base64_decode($txt), $key);
$tmp = '';
for($i = 0;$i < strlen($txt); $i++) {
$md5 = $txt[$i];
$tmp .= $txt[++$i] ^ $md5;
}
return $tmp;
}
function passport_key($txt, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr = 0;
$tmp = '';
for($i = 0; $i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}
?>

用PHP获取本周第一天和最后一天,网上有很多方法,但是太麻烦,或者有bug,这是用php自带的DateTime类实现的方法,比较简单:

//本周的第一天和最后一天

 代码如下 复制代码
$date=new DateTime();
$date->modify('this week');
$first_day_of_week=$date->format('Y-m-d');
$date->modify('this week +6 days');
$end_day_of_week=$date->format('Y-m-d');


经过测试modity不知道是用做什么了,于时找了另两个例子

 代码如下 复制代码

//这个星期的星期一

// @$timestamp ,某个星期的某一个时间戳,默认为当前时间

// @is_return_timestamp ,是否返回时间戳,否则返回时间格式

function this_monday($timestamp=0,$is_return_timestamp=true){

static $cache ;

$id = $timestamp.$is_return_timestamp;

if(!isset($cache[$id])){

if(!$timestamp) $timestamp = time();

$monday_date = date('Y-m-d', $timestamp-86400*date('w',$timestamp)+(date('w',$timestamp)>0?86400:-/*6*86400*/518400));

if($is_return_timestamp){

$cache[$id] = strtotime($monday_date);

}else{

$cache[$id] = $monday_date;

}

}

return $cache[$id];

 


}


//这个星期的星期天

 代码如下 复制代码

// @$timestamp ,某个星期的某一个时间戳,默认为当前时间

// @is_return_timestamp ,是否返回时间戳,否则返回时间格式

function this_sunday($timestamp=0,$is_return_timestamp=true){

static $cache ;

$id = $timestamp.$is_return_timestamp;

if(!isset($cache[$id])){

if(!$timestamp) $timestamp = time();

$sunday = this_monday($timestamp) + /*6*86400*/518400;

if($is_return_timestamp){

$cache[$id] = $sunday;

}else{

$cache[$id] = date('Y-m-d',$sunday);

}

}

return $cache[$id];

}

php是脚本语言所以在即时聊天中发挥不好,特别是用php当服务器向手机推送信息时,如果信息量有一点多,就会造成php服务器压力山大,不过我们也可用第三方极光推送

我们只需要在极光网站上申请,然后就appkey记录下来,写在代码里我这里是在thinkphp中测试的

 代码如下 复制代码

<?php
class ApipostAction extends Action{
/**
* 模拟post进行url请求
* @param string $url
* @param string $param
*/
private $_appkeys = ‘**********************’;
private $_masterSecret = ‘**********************’;

function request_post($url = ”, $param = ”) {
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//运行curl
curl_close($ch);
return $data;
}
/**
* 发送
* @param int $sendno 发送编号。由开发者自己维护,标识一次发送请求
* @param int $receiver_type 接收者类型。1、指定的 IMEI。此时必须指定 appKeys。2、指定的 tag。3、指定的 alias。4、 对指定 appkey 的所有用户推送消息。* @param string $receiver_value 发送范围值,与 receiver_type相对应。 1、IMEI只支持一个 2、tag 支持多个,使用 “,” 间隔。 3、alias 支持多个,使用 “,” 间隔。 4、不需要填
* @param int $msg_type 发送消息的类型:1、通知 2、自定义消息
* @param string $msg_content 发送消息的内容。 与 msg_type 相对应的值
* @param string $platform 目标用户终端手机的平台类型,如: android, ios 多个请使用逗号分隔
*/
function send($sendno = 0,$receiver_type = 1, $receiver_value = ”, $msg_type = 1, $msg_content = ”, $platform = ‘android’) {
$url = ‘http://api.jpush.cn:8800/sendmsg/v2/sendmsg’;
$param = ”;
$param .= ‘&sendno=’.$sendno;
$appkeys = $this->_appkeys;
$param .= ‘&app_key=’.$appkeys;
$param .= ‘&receiver_type=’.$receiver_type;
$param .= ‘&receiver_value=’.$receiver_value;
$masterSecret = $this->_masterSecret;
$verification_code = md5($sendno.$receiver_type.$receiver_value.$masterSecret);
$param .= ‘&verification_code=’.$verification_code;
$param .= ‘&msg_type=’.$msg_type;
$param .= ‘&msg_content=’.$msg_content;
$param .= ‘&platform=’.$platform;
$res = $this->request_post($url, $param);

$res_arr = json_decode($res, true);
if (intval($res_arr['errcode'])!=0){
return false;
}else{
return true;
}
/*if ($res === false) {
return false;
}
$res_arr = json_decode($res, true);
$res_arr['errmsg']= “没有错误信息”;
switch (intval($res_arr['errcode'])) {
case 0:$res_arr['errmsg'] = ‘发送成功’;   break;
case 10:$res_arr['errmsg'] = ‘系统内部错误’;break;
case 1001:$res_arr['errmsg'] = ‘只支持 HTTP Post 方法,不支持 Get 方法’;break;
case 1002:$res_arr['errmsg'] = ‘缺少了必须的参数’;break;
case 1003:$res_arr['errmsg'] = ‘参数值不合法’;break;
case 1004:$res_arr['errmsg'] = ‘验证失败’;break;
case 1005:$res_arr['errmsg'] = ‘消息体太大’;break;
case 1007:$res_arr['errmsg'] = ‘receiver_value 参数 非法’;break;
case 1008:$res_arr['errmsg'] = ‘appkey参数非法’;break;
case 1010:$res_arr['errmsg'] = ‘msg_content 不合法’;break;
case 1011:$res_arr['errmsg'] = ‘没有满足条件的推送目标’;break;
case 1012:$res_arr['errmsg'] = ‘iOS 不支持推送自定义消息。只有 Android 支持推送自定义消息’;break;
default:break;
}
$msg_content = json_decode($msg_content,true);
if (intval($res_arr['errcode'])==0){
$str= “<li>第”.$res_arr['sendno'].”条发送”.$res_arr['errmsg'].”!</li>”;
}else{
$str= “<li>第”.$res_arr['sendno'].”条发送失败:”.$res_arr['errmsg'].”</li>”;
}
print_r($str);die();*/
}
}
?>

调用
<?php
$receiver_value = 1;//接收者id和n_builder_id相同
$platform = ‘android,ios’;//在上面手机上接收
$msg_content = json_encode(array(‘n_builder_id’=>’1′, ‘n_title’=>’标题’, ‘n_content’=>’内容’,'n_extras’=>array(‘fromer’=>’发送者’,'fromer_name’=>’发送者名字’,'fromer_icon’=>’发送者头像’,'image’=>’发送图片链接’,'sound’=>’发送音乐链接’)));
$this->send($sendno,3,$receiver_value,1,$msg_content,$platform);
?>

递归实现无限分类就是自动调用自己了,下面一个二级分类的例子,如果有你需要就拿去吧,没什么原理下算法的纠结了。

数组:

 代码如下 复制代码

$items = array(
 array('id' => 1, 'pid' => 0, 'name' => '一级11' ),
 array('id' => 11, 'pid' => 0, 'name' => '一级12' ),
 array('id' => 2, 'pid' => 1, 'name' => '二级21' ),
 array('id' => 10, 'pid' => 11, 'name' => '二级22' ),
 array('id' => 3, 'pid' => 1, 'name' => '二级23' ),
 array('id' => 12, 'pid' => 11, 'name' => '二级24' ),
 array('id' => 13, 'pid' => 12, 'name' => '三级31' ),
 array('id' => 9, 'pid' => 1, 'name' => '二级25' ),
);

函数:

 代码如下 复制代码

function formatTree($array, $pid = 0){
 $arr = array();
 $tem = array();
 foreach ($array as $v) {
  if ($v['pid'] == $pid) {
   $tem = formatTree($array, $v['id']);
                        //判断是否存在子数组
   $tem && $v['son'] = $tem;
   $arr[] = $v;
  }
 }
 return $arr;
}

其中,数组一定要包含id和pid用以指定数组值之间的层级关系

[!--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
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

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

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

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • 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
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 使用PHP similar text计算两个字符串相似度

    在网站开发中,我们经常使用php similar text 计算两个字符串相似度;1,similar_text的用法 如果我想计算"ly89cn"和"ly89"的相似程度,有两种表示方法复制代码 代码如下: echo similar_text('ly89cn', 'ly89'); ...2015-11-08