mb_strpos

(PHP 4 >= 4.0.6, PHP 5)

mb_strpos --  Find position of first occurrence of string in a string

Description

int mb_strpos ( string haystack, string needle [, int offset [, string encoding]] )

mb_strpos() returns the numeric position of the first occurrence of needle in the haystack string. If needle is not found, it returns FALSE.

mb_strpos() performs multi-byte safe strpos() operation based on number of characters. needle position is counted from the beginning of the haystack. First character's position is 0. Second character position is 1, and so on.

If encoding is omitted, internal character encoding is used. mb_strrpos() accepts string for needle where strrpos() accepts only character.

offset is search offset. If it is not specified, 0 is used.

encoding is character encoding name. If it is omitted, internal character encoding is used.

See also mb_strrpos(), mb_internal_encoding(), strpos()


add a note add a note User Contributed Notes
stestagg at talk21 dot com
06-Aug-2006 08:12
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
stestagg at talk21 dot com
05-Aug-2006 12:42
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;
}
stestagg at talk21 dot com
05-Aug-2006 12:39
It appears that the $offset value is a character count not a byte count.  (This may seem obvious but it isn't explicitly stated)