(PHP 5)

striposВозвращает позицию первого вхождения подстроки без учета регистра


int stripos ( string $haystack , string $needle [, int $offset = 0 ] )

Ищет позицию первого вхождения подстроки needle в строку haystack.

В отличие от strpos(), эта функция не учитывает регистр символов.

Список параметров


Строка, в которой производится поиск.


Заметьте, что needle может содержать строку из одного или более символов.

Если needle не является строкой, он приводится к целому и трактуется как код символа.


Если этот параметр указан, то поиск будет начат с указанного количества символов с начала строки. В отличии от strrpos() и strripos() данный параметр не может быть отрицательным.

Возвращаемые значения

Возвращает позицию, в которой находится искомая строка, относительно начала строки haystack (независимо от смещения (offset). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.

Возвращает FALSE, если искомая строка не найдена.


Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.


Пример #1 Пример использования stripos()

$mystring1 'xyz';
$mystring2 'ABC';

$pos1 stripos($mystring1$findme);
$pos2 stripos($mystring2$findme);

// Конечно, 'a' не входит в 'xyz'
if ($pos1 === false) {
"Строка '$findme' не найдена в строке '$mystring1'";

// Заметьте, что используется ===.  Использование == не даст верного 
// результата, так как 'a' в нулевой позиции.
if ($pos2 !== false) {
"Нашел '$findme' в '$mystring2' в позиции $pos2";


Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • strpos() - Возвращает позицию первого вхождения подстроки
  • strrpos() - Возвращает позицию последнего вхождения подстроки в строке
  • strripos() - Возвращает позицию последнего вхождения подстроки без учета регистра
  • stristr() - Регистро-независимый вариант функции strstr
  • substr() - Возвращает подстроку
  • str_ireplace() - Регистро-независимый вариант функции str_replace


this would to work with any language, i hope.
tested on czech (eastern europe) lang.

 * function finds and encase every string in a $needleArr array with
 * strings $shearLft (from the left side) and $shearRgt (guess from which
 * side).
 * already encased needles are IGNORED for any other step, so order
 * of needles in $needleArr is pretty important.
 * function is searching needles in case-insensitive mode,
 * but case in the subject is saved.
 * can you do it better? so, do it.
 * @param array $needleArr array of needles
 * @param string $shearLft left shear
 * @param string $shearRgt right shear
 * @param string $subject subject
 * @param string $encoding encoding ('utf-8' is default)
 * @author griffin
function safeHighlight$needleArr$shearLft$shearRgt$subject$encoding 'utf-8')
// encoding
$e $encoding;
// oh, no needles
if( !is_array$needleArr))
// empty keys throw-off, only unique, reindex
$nA array_values(
array_diff$needleArr, array(''))
// needle count
if( !($nC count$nA)))
$subject// nothing to hl
    // shear length
if( !(($rLL mb_strlen$rL $shearLft$e))
    + (
$rRL mb_strlen$rR $shearRgt$e))))
$subject// no shears
    // subject length
if( !($sL mb_strlen$s $subject$e)))
null// empty subject
    // subject in lowercase (we need to aviod
    // using mb_stripos due to PHP version)
$sW mb_strtolower$s$e);
// masking ~ 0=not changed, 1=changed
$m str_repeat'0'$sL);
// loop for each needle
for( $n=0$n<$nC$n++)
// needle string loWercase
$nW mb_strtolower$nA$n], $e);
$o 0// offset
$nL mb_strlen$nW$e); // needle length

        // search needle
while( false !== ($p mb_strpos$sW$nW$o$e)))
// oh hurrey, needle found on $p position
            // is founded needle already modified? (in full-length)
for( $q=$p$q<($p+$nL); $q++)
// ai, caramba. already modified, jump over
$o+= $nL;
// continue for while() loop - not for for() loop!
continue 2;
// explode subject and mask into three parts
            // partA|needle|partB
$sE[0] = mb_substr$s0$p$e);
$sE[1] = mb_substr$s$p$nL$e);
$sE[2] = mb_substr$s$p+$nL$sL-$p-$nL$e);
// mask
            // partA|partB (needle not needed)
$mE[0] = mb_substr$m0$p$e);
$mE[1] = mb_substr$m$p+$nL$sL-$p-$nL$e);
// apply shears
$sE[1] = $rL.$sE[1].$rR;
// update sunject length
$sL+= $rLL $rRL;
// update mask
$m $mE[0] . str_repeat'1'$rLL $nL $rRL) . $mE[1];
// implode into a subject
$s implode$sE);
// update lowercase subject
$sW mb_strtolower$s$e);
// increase offset
$o+= $rLL $nL $rRL;
// end of string reached
if( $o>=$sL)
// while()
// for( $n=0; $n<$nC; $n++)
    // oouu yeaaa, kick the subject out of the function
return $s;
// function safeHighlight()
2007-03-20 06:57:59
I found myself needing to find the first position of multiple needles in one haystack.  So I wrote this little function:

function multineedle_stripos($haystack$needles$offset=0) {
$needles as $needle) {
$found[$needle] = stripos($haystack$needle$offset);

// It works as such:
$haystack "The quick brown fox jumps over the lazy dog.";
$needle = array("fox""dog"".""duck")
/* Output:
   array(3) {
2009-02-24 21:31:52
A handy function if you need to adjust layout based on whether or not a string contains descending letters:

<?php function containsDescenders($text) {
$descenders = array("g","j","p","q","y");
    foreach (
$descenders as $letter) {
        if (
stripos($text,$letter) !== false) {
2013-07-01 19:38:03
If you like using ternary operator, I wrote simple example how to use stripos function.
Also, in my example I add "How to use namespaces" for wide knowledges for newbies.

namespace My

//You can be free using core functions in your NameSpaces (My)
function stripos($haystack$needle) {
//To call core function (from global NS) you should add backslash only - \func
return (FALSE === stripos($haystack$needle)) ? FALSE TRUE;

var_dump(stripos($haystack 'John knows English language.'$needle 'john')); //TRUE
var_dump(stripos($haystack 'Sara knows English language too.'$needle 'john')); //FALSE
2013-12-15 10:57:32
Regarding the function by spam at wikicms dot org

It is very bad practice to use the same function name as an existing php function but have a different output format.  Someone maintaining the code in the future is likely to be very confused by this.  It will also be hard to eradicate from a codebase because the naming is identical so each use of stripos() would have to be analyzed to see how it is expecting the output format (bool or number/bool).

Calling it string_found() or something like that would make a lot more sense for long-term use.
2015-03-04 16:08:11
Regarding the === note, it might be worth clarifying that the correct tests for a binary found/not found condition are  !==false to detect found, and ===false to detect not found.
2015-08-29 13:25:57
Unlike strpos() it seems that stripos() does NOT issue a WARNING if the needle is an empty string ''.
2018-08-02 04:48:15
Finding numbers in strings requires you to cast the number to string first.

strpos("123", 2) !== strpos("123", "2")
2018-08-19 17:07:04

    Поддержать сайт на родительском проекте КГБ