PHP之mb_substr使用

夏婆子
• 阅读 1796

mb_substr

  • (PHP 4 >= 4.0.6, PHP 5, PHP 7)
  • mb_substr — Get part of string
  • mb_substr — 获取部分字符串

Description

string mb_substr ( 
    string $str ,
    int $start [,
    int $length = NULL [, 
    string $encoding = mb_internal_encoding() ]] 
    )
// Performs a multi-byte safe substr() operation based on number of characters. Position is counted from 
// the beginning of str. First character's position is 0. Second character position is 1, and so on.
//根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1,以此类推。

Parameters

str

  • The string to extract the substring from.
  • 从该 string 中提取子字符串。

start

  • If start is non-negative, the returned string will start at the start'th position in str, counting from zero. For instance, in the string 'abcdef', the character at position 0 is 'a', the character at position 2 is 'c', and so forth.
  • 如果 start 不是负数,返回的字符串会从 str 第 start 的位置开始,从 0 开始计数。举个例子,字符串 'abcdef',位置 0 的字符是 'a',位置 2 的字符是 'c',以此类推。
  • If start is negative, the returned string will start at the start'th character from the end of str.
  • 如果 start 是负数,返回的字符串是从 str 末尾处第 start 个字符开始的。

length

  • Maximum number of characters to use from str. If omitted or NULL is passed, extract all characters to the end of the string.
  • str 中要使用的最大字符数。如果省略了此参数或者传入了 NULL,则会提取到字符串的尾部。

encoding

  • The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.
  • encoding 参数为字符编码。如果省略,则使用内部字符编码。

Return Values

  • mb_substr() returns the portion of str specified by the start and length parameters.
  • mb_substr() 函数根据 start 和 length 参数返回 str 中指定的部分。

Changelog

  • 5.4.8 - Passing NULL as length extracts all characters to the end of the string. Prior to this version NULL was treated the same as 0.

Examples

<?php
/**
 * Created by PhpStorm.
 * User: zhangrongxiang
 * Date: 2018/1/30
 * Time: 下午8:51
 */

$string = "0123456789你好";
/** start > 0  length > 0*/
$mystring = mb_substr( $string, 5, 1 );
echo $mystring . PHP_EOL; // 5
$mystring = mb_substr( $string, 5, 2 );
echo $mystring . PHP_EOL; // 56
$mystring = mb_substr( $string, 10, 2 );
echo $mystring . PHP_EOL; // 你好

/** start < 0  length > 0*/
$mystring = mb_substr( $string, - 2, 2 );
echo $mystring . PHP_EOL; // 你好
echo 'mb_strlen : ' . mb_strlen( $string ) . PHP_EOL;//12
$mystring = mb_substr( $string, - mb_strlen( $string ), 2 );
echo $mystring . PHP_EOL; // 01
$mystring = mb_substr( $string, - 3, 2 );
echo $mystring . PHP_EOL; // 9你

/** start > 0  length <  0*/
$mystring = mb_substr( $string, 5, - 1 );
echo $mystring . PHP_EOL; // 56789你
$mystring = mb_substr( $string, 0, - mb_strlen( $string ) + 1 );
echo $mystring . PHP_EOL; // 0
$mystring = mb_substr( $string, 5, - 5 );
echo $mystring . PHP_EOL; // 56

/** start < 0  length <  0*/
$mystring = mb_substr( $string, - 10, - 1 );
echo $mystring . PHP_EOL; // 23456789你
$mystring = mb_substr( $string, - 5, - 1 );
echo $mystring . PHP_EOL; // 789你

function mb_ucfirst( $str, $enc = 'utf-8' ) {
    return mb_strtoupper( mb_substr( $str, 0, 1, $enc ), $enc ) . mb_substr( $str, 1, mb_strlen( $str, $enc ), $enc );
}

echo mb_ucfirst( "hello world 你好 中国" ) . PHP_EOL; //Hello world 你好 中国

/**
 * @param $string
 * @param string $encoding
 *
 * @return array
 */
function get_character_classes( $string, $encoding = "UTF-8" ) {
    $current_encoding = mb_internal_encoding();
    mb_internal_encoding( $encoding );
    $has          = array();
    $stringlength = mb_strlen( $string, $encoding );
    for ( $i = 0; $i < $stringlength; $i ++ ) {
        $c = mb_substr( $string, $i, 1 );
        if ( ( $c >= "0" ) && ( $c <= "9" ) ) {
            $has['numeric'] = "numeric";
        } else if ( ( $c >= "a" ) && ( $c <= "z" ) ) {
            $has['alpha']      = "alpha";
            $has['alphalower'] = 'alphalower';
        } else if ( ( $c >= "A" ) && ( $c <= "Z" ) ) {
            $has['alpha']      = "alpha";
            $has['alphaupper'] = "alphaupper";
        } else if ( ( $c == "$" ) || ( $c == "£" ) ) {
            $has['currency'] = "currency";
        } else if ( ( $c == "." ) && ( $has['decimal'] ) ) {
            $has['decimals'] = "decimals";
        } else if ( $c == "." ) {
            $has['decimal'] = "decimal";
        } else if ( $c == "," ) {
            $has['comma'] = "comma";
        } else if ( $c == "-" ) {
            $has['dash'] = "dash";
        } else if ( $c == " " ) {
            $has['space'] = "space";
        } else if ( $c == "/" ) {
            $has['slash'] = "slash";
        } else if ( $c == ":" ) {
            $has['colon'] = "colon";
        } else if ( ( $c >= " " ) && ( $c <= "~" ) ) {
            $has['ascii'] = "ascii";
        } else {
            $has['binary'] = "binary";
        }
    }
    mb_internal_encoding( $current_encoding );
    
    return $has;
}

$string = "1234asdfA£^_{}|}~žščř";
foreach ( get_character_classes( $string ) as $k => $v ) {
    echo $k . " : " . $v . PHP_EOL;
}
//numeric : numeric
//alpha : alpha
//alphalower : alphalower
//alphaupper : alphaupper
//currency : currency
//ascii : ascii
//binary : binary

文章参考

转载注明出处

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
LinkWeChat 基于企业微信的SCRM私域流量开源系统
LinkWeChat(https://gitee.com/LinkWeChat/linkwechat"LinkWeChat")平台介绍LinkWeChat(https://gitee.com/Li
Wesley13 Wesley13
3年前
PHP安全性防范方式
<h2SQL注入</h2<pSQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。</p<h4防范方式</h4<ul<li使用mysql\_real\_escape\_string(),或者addslashes()过滤数据</li<li手动检查每一数据是否为正确的数据类型</li<li使用
Wesley13 Wesley13
3年前
Activiti 工作流入门指南
<divclass"htmledit\_views"id"content\_views"<h1<aname"t0"</a概览</h1<p如我们的介绍部分所述,Activiti目前分为两大类:</p<ul<li<p<ahref"https://activiti.gitbook.io/activiti7deve
Stella981 Stella981
3年前
ASMSupport教程4.8 生成逻辑运算操作
<p在java中有以下逻辑运算符:</p<ul<li&amp;&amp;:条件与</li<li||:条件或</li<li&amp;:布尔型的逻辑与</li<li|:布尔型的逻辑或</li<li^:布尔型的逻辑异或</li<li!:非操作</li</ul<p那么接下来我们将些段例子
Stella981 Stella981
3年前
SQLAlchemy和Flask
假设page\_index1,page\_size10;所有分页查询不可以再跟first(),all()等1.用offset()设置索引偏移量,limit()限制取出filter语句后面可以跟order_by语句db.session.query(User.name).filter(User.email.li
Wesley13 Wesley13
3年前
mysql 5.7 windows zip安装
<ol<limysql官网下载windowszip安装包并解压(D:wampmysql56winx64)</li<li添加pathD:wampmysql5722winx64bin</li<li创建data目录D:\\wamp\\mysql56winx64\\data</li<li<p创建mysql配置文
Stella981 Stella981
3年前
ASMSupport教程4.11 生成数组操作
<p在任何语言里,数组都是基本的数据类型,我们这一节将讲述如何生成数组操作。</p<p数组操作包括以下几个:</p<ol<li创建数组</li<li获取数组长度</li<li获取数组每个元素的内容</li<li为数组元素赋值</li</ol<p我们接下来对每种操作进行详解。</p<h3<fonts
Stella981 Stella981
3年前
IdeaVim
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h3id"ideavim简介"IdeaVim简介</h3<pIdeaVim是IntelliJIDEA的一款插件,他提高了我们写代码的速度,对代码的跳转,查找也很友好。</p<ul<li安装位置</
Stella981 Stella981
3年前
JavaScript DOM编程艺术(第2版)学习笔记2(4~6章应用实例)
本书的第4章使用第3章学到的操作DOM的方法和属性写了一个展示图片的网页,并在第5,6章对代码进行了优化。第一版,搭建网页的静态结构,包括一级标题<h1,无序列表清单<ul,每个列表<li中又包括了链接<a,当点击列表文字时会显示链接所指向的图片,这属于浏览器的默认行为。代码如下:<!DOCTYPEhtml<ht
Stella981 Stella981
3年前
ASMSupport教程4.12 生成方法调用操作
<p这一节我们讲如何用ASMSupport生成方法调用的操作,方法调用包括下面四种类型:</p<ol<li调用构造方法<li调用静态方法<li调用非静态方法<li调用当前类的方法<li调用父类方法</li</ol<p首先我们需要看我们想要生成的类:</p<p代码1:</p<h3<divid"scid:9D
Wesley13 Wesley13
3年前
HTML快捷写法大全
父子用\ \Ulli\3\<ul\    <li\</li\    <li\</li\    <li\</li\</ul\兄弟之间用,也可以省写\pspan\,\ul\<p\</p\<span