downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mb_strrchr> <mb_strlen
Last updated: Fri, 14 Aug 2009

view this page in

mb_strpos

(PHP 4 >= 4.0.6, PHP 5)

mb_strposRepère la première occurrence d'un caractère dans une chaîne

Description

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

Repère la position de la première occurrence d'un caractère dans la chaîne fournie.

Effectue une recherche de type strpos(), en tenant compte des caractères multi-octets. La position de needle est comptée à partir du début de la chaîne haystack : les positions commencent à 0.

Liste de paramètres

haystack

La chaîne à analyser.

needle

La position, depuis le début de haystack .

offset

La position de début de recherche. S'il est omis, zéro sera utilisé (début de la chaîne).

encoding

Le paramètre encoding est l'encodage des caractères. S'il est omis, l'encodage de caractres interne sera utilisé.

Valeurs de retour

Retourne la position numérique de la première occurrence du caractère needle dans la chaîne haystack . Si needle est introuvable, mb_strpos() retourne FALSE.

Voir aussi



mb_strrchr> <mb_strlen
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
mb_strpos
brendel at krumedia dot de
11-Mar-2008 12:42
mb_strpos() used in a loop on a long string may become very slow even if you provide the $offset. Unlike strpos(), mb_strpos() has to skip the number of characters
 every call specified by $offset to get the real byte position used internally. (Whereas strpos can just add the offset.)

If your encoding is UTF-8 and you try to find only single characters with ordinal <= 127 you may still use strpos(), substr(), ... This works cause every byte of a UTF-8 sequence is >= 128.

Greetz maz
zangaru at hotmail dot com
06-Jul-2007 05:42
Hello,

Just replaced strpos() with mb_strpos() and now I am getting following error:

PHP Warning:  mb_strpos() [<a href='function.mb-strpos'>function.mb-strpos</a>]: Empty delimiter

PHP version: 5.2.3
OS: Win XP Prof
Web Server: IIS

I checked your bugs and mentioned that mb_string functions have been fixed as of 5.2.0 but it does not seem to be the case (Bug #39400).

My code:
==============================================

$charOut = mb_substr($tmpStr, $tmpKey[0], 1);
$posOut = mb_strpos($charList, $charOut);
if ($posOut !== FALSE) {
    // do something here
}

==============================================
stestagg at talk21 dot com
06-Aug-2006 12: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
04-Aug-2006 04: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
04-Aug-2006 04: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)

mb_strrchr> <mb_strlen
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites