• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mb_strpos()

    (PHP 4 >= 4.0.6, PHP 5, PHP 7)

    查找字符串在另一个字符串中首次出现的位置

    说明

    mb_strpos(string $haystack,string $needle[,int $offset= 0[,string $encoding= mb_internal_encoding()]]): int

    查找string在一个string中首次出现的位置。

    基于字符数执行一个多字节安全的strpos()操作。第一个字符的位置是 0,第二个字符的位置是 1,以此类推。

    参数

    $haystack

    要被检查的string。

    $needle

    $haystack中查找这个字符串。和strpos()不同的是,数字的值不会被当做字符的顺序值。

    $offset

    搜索位置的偏移。如果没有提供该参数,将会使用 0。负数的 offset 会从字符串尾部开始统计。

    $encoding

    $encoding参数为字符编码。如果省略,则使用内部字符编码。

    返回值

    返回string的$haystack$needle首次出现位置的数值。如果没有找到$needle,它将返回FALSE

    更新日志

    版本说明
    7.1.0支持负数的$offset

    参见

    It appears that the $offset value is a character count not a byte count. (This may seem obvious but it isn't explicitly stated)
    a sample mb_str_replace function:
    function mb_str_replace($haystack, $search,$replace, $offset=0,$encoding='auto'){
      $len_sch=mb_strlen($search,$encoding);
      $len_rep=mb_strlen($replace,$encoding);
      
      while (($offset=mb_strpos($haystack,$search,$offset,$encoding))!==false){
        $haystack=mb_substr($haystack,0,$offset,$encoding)
          .$replace
          .mb_substr($haystack,$offset+$len_sch,1000,$encoding);
        $offset=$offset+$len_rep;
        if ($offset>mb_strlen($haystack,$encoding))break;
      }
      return $haystack;
    }
    sorry, my previous post had an error. replace the 1000 with strlen($haystack) to handle strings longer than 1000 chars.
    btw. This is an issue with the mbstring functions. you can't specify the $encoding without specifying a $length, thus this reduces the functionality of mb_substr compared to substr

    上篇:mb_strlen()

    下篇:mb_strrchr()