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

search for in the

strrchr> <strpbrk
Last updated: Tue, 30 Jun 2009

view this page in

strpos

(PHP 4, PHP 5)

strposFind position of first occurrence of a string

Description

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

Returns the numeric position of the first occurrence of needle in the haystack string. Unlike the strrpos() before PHP 5, this function can take a full string as the needle parameter and the entire string will be used.

Parameters

haystack

The string to search in

needle

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.

offset

The optional offset parameter allows you to specify which character in haystack to start searching. The position returned is still relative to the beginning of haystack .

Return Values

Returns the position as an integer. If needle is not found, strpos() will return boolean FALSE.

Warning

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Examples

Example #1 Using ===

<?php
$mystring 
'abc';
$findme   'a';
$pos strpos($mystring$findme);

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
    echo 
"The string '$findme' was not found in the string '$mystring'";
} else {
    echo 
"The string '$findme' was found in the string '$mystring'";
    echo 
" and exists at position $pos";
}
?>

Example #2 Using !==

<?php
$mystring 
'abc';
$findme   'a';
$pos strpos($mystring$findme);

// The !== operator can also be used.  Using != would not work as expected
// because the position of 'a' is 0. The statement (0 != false) evaluates 
// to false.
if ($pos !== false) {
     echo 
"The string '$findme' was found in the string '$mystring'";
         echo 
" and exists at position $pos";
} else {
     echo 
"The string '$findme' was not found in the string '$mystring'";
}
?>

Example #3 Using an offset

<?php
// We can search for the character, ignoring anything before the offset
$newstring 'abcdef abcdef';
$pos strpos($newstring'a'1); // $pos = 7, not 0
?>

Notes

Note: This function is binary-safe.

See Also

  • strrpos() - Find position of last occurrence of a char in a string
  • stripos() - Find position of first occurrence of a case-insensitive string
  • strripos() - Find position of last occurrence of a case-insensitive string in a string
  • strrchr() - Find the last occurrence of a character in a string
  • substr() - Return part of a string
  • stristr() - Case-insensitive strstr
  • strstr() - Find first occurrence of a string



strrchr> <strpbrk
Last updated: Tue, 30 Jun 2009
 
add a note add a note User Contributed Notes
strpos
dpharris at llu dot edu
29-Jun-2009 03:54
vbracco wonderful function below (04-Apr-2009 02:45) doesn't check for if the result is null.  My use of the function returned an empty set as the result of min.  Here is my correction.

vbracco, thanks for saving me some time.

<?php
function strposa($haystack ,$needles=array(),$offset=0){
   
$chr = array();
    foreach(
$needles as $needle){
        if (
strpos($haystack,$needle,$offset)) {
         
$chr[] = strpos($haystack,$needle,$offset);
       }
    }
    if(empty(
$chr)) return false;
    return
min($chr);
}

$string = "This is my string, very simple.";

echo
strposa($string,array(".",","," ")); // 2
echo strposa($string,array("T")); // 0
echo strposa($string,array("Q","W")); // false
?>
bob at mailinator dot com
03-Jun-2009 06:26
I found in a certain bit of my code that under certain circumstances, $needle could be an empty string. This caused strpos to generate an error message.
To get round it, I had to first test to see if $needle was an empty string, and then (ie 'else') go forward and do the strpos test if not.
vbracco at gmail dot com
04-Apr-2009 02:45
This function find position of first occurrence of any $needles in a string $haystack.
Return the position as an integer. If needles is not found, strposa() will return boolean  FALSE.

<?php
function strposa($haystack ,$needles=array(),$offset=0){
   
$chr = array();
    foreach(
$needles as $needle){
       
$chr[] = strpos($haystack,$needle,$offset);
    }
    if(empty(
$chr)) return false;
    return
min($chr);
}

$string = "This is my string, very simple.";

echo
strposa($string,array(".",","," ")); // 2
echo strposa($string,array("T")); // 0
echo strposa($string,array("Q","W")); // false
?>
lkj dot korn AT NOSPAMgmail d0t c0m
03-Apr-2009 08:57
Note that strpos() will return false if you supply an integer (thus, this presumably applies to float, too) as needle. For example:

<?php
$id
= 2; $text = '12345';
if(
strpos($text, $id) === false){
  echo
'Yes, is false';
}
?>

Will output 'Yes, is false', a behavior which may not be very intuitive (you'd think it would be covered by PHP's type juggling feature).
This can be easily fixed by adding $id = (string)$id; above the strpos() statement.
teddanzig at yahoo dot com
23-Mar-2009 05:48
routine to return -1 if there is no match for strpos

<?php
//instr function to mimic vb instr fucntion
function InStr($haystack, $needle)
{
   
$pos=strpos($haystack, $needle);
    if (
$pos !== false)
    {
        return
$pos;
    }
    else
    {
        return -
1;
    }
}
?>
peterzuzek at gmail dot com
08-Feb-2009 07:01
A function that return the first occurance of a number in a string, if anyone needs it.

Translation/prevod:
Funkcija, ki vrača pozicijo prve številke v besedi, če jo kdo potrebuje.

<?php

   
function firstNumPos($str) {
       
$poses = array(); // will be storing positions of the numbers

       
for($i = 0; $i < 10; ++$i) { // cycle through numbers
           
if(($a = strpos($str, (string)$i)) !== false) {
               
$poses[] = $a;    // append the position of
                                // the first occurance of the number
           
}
        }
        if(isset(
$poses[0])) { // if array not empty
           
sort($poses);        // sort to get the lowest one on the 'bottom'
           
return $poses[0];    // and return it
       
}
        return
false; // otherwise return false

   
} // firstNumPos()

?>
jburns131 at jbwebware dot com
28-Dec-2008 12:48
The Situation:

I wanted to return TRUE if strpos returned position 0, and only position 0, without the added overhead of preg_match.

The Solution:

As PHP treats 0 (zero) as NULL, and strpos returns the int 0 (but not NULL), I used type casting and the "===" comparison operator (as it compares types) to resolve my issue.

<?php

$hayStack
= "dbHost";
$needle  = "db"
$needlePos = strpos($hayStack, $needle);

if((string)
$needlePos === (string)0) {
    echo
"db is in position zero";
} else {
    echo
"db is NOT in position zero";
}

?>

Returns:
db is in position zero

<?php

$hayStack
= "another_db_host";
$needle  = "db"
$needlePos = strpos($hayStack, $needle);

if((string)
$needlePos === (string)0) {
    echo
"db is in position zero";
} else {
    echo
"db is NOT in position zero";
}

?>

This returns:
db is in NOT position zero
Tim
18-Nov-2008 01:52
If you would like to find all occurences of a needle inside a haystack you could use this function strposall($haystack,$needle);. It will return an array with all the strpos's.

<?php
/**
 * strposall
 *
 * Find all occurrences of a needle in a haystack
 *
 * @param string $haystack
 * @param string $needle
 * @return array or false
 */
function strposall($haystack,$needle){
   
   
$s=0;
   
$i=0;
   
    while (
is_integer($i)){
       
       
$i = strpos($haystack,$needle,$s);
       
        if (
is_integer($i)) {
           
$aStrPos[] = $i;
           
$s = $i+strlen($needle);
        }
    }
    if (isset(
$aStrPos)) {
        return
$aStrPos;
    }
    else {
        return
false;
    }
}
?>
atomkirk at hotmail dot com
23-Oct-2008 01:19
careful that when you put a strpos in an if statement that you take note that if the string is in the 0 position it will return false, causing your control structure to think its not in the string.
samundra dot shr at gmail dot com
28-Sep-2008 06:40
This is the code,I wrote today, I wanted to strip all the newlines, and format the output in a single line so as to lower the filesize of my php source files.

<?php
/****************************************
@ Code By : Samundra Shrestha
@ Dated : September 28,2008
P.S. Remember to remove all single line comments from the source file
        otherwise the file may get corrupted.
******************************************/
if(!isset($_POST['change']) || !isset($_POST['filename']))
{
    print
"<b>".strtoupper("Paste the fullpath of the file")."</b>";
    print
"<form name='FrmChange' method='post' action='".$_SERVER['PHP_SELF']."'>";
    print
"<input type='textbox' name='filename' size='50px' maxlength='255'>";
    print
"<input type='submit' name='change' value='Start'>";
    print
"</form>";
}
else
{
$filename=$_POST['filename'];
if(!
$fpin=@fopen($filename,"r"))
{
    print
"<b>Error ! File Doesn't Exists</b>";
    exit();
}
$text="";
$i=0;
/*Put the contents of file into the string*/
while(!feof($fpin))
{
   
$text.=fread($fpin,1024);
}
$count=strlen($text);
$pos=strpos($text,"\n"); //Gives the First occurence of newline
while($i<$count)
{   
    if(
$i<$pos-1)
    {
       
$newtext.=$text{$i}; //C Style of String Indexing       
   
}
    else
    {
       
$pos=strpos($text,"\n",$i+1);
    }   
   
$i++;   
}
$newtext.="?>";   //necessary as somehow it is removed from the original source file.
$fp=fopen("sample.txt","wb+");
fwrite($fp,$newtext);
fclose($fp);   
print
"File Changed Successfully.";
}
?>

The resultant code is all in one new line saved in file sample.txt

I hope, this comes handy to someone.

Cheers,
Samundra Shrestha
http://www.samundra.com.np
mickRacky
19-Sep-2008 06:17
here's a php implementation of stdc++ string class find_first_of using strpos.

<?php
function find_first_of($haystack, $needlesAsString, $offset=0)
{
 
$max = strlen($needlesAsString);
 
$index = strlen($haystack)+1;
  for(
$ii=0; $ii<$max;$ii++){
   
$result = strpos($haystack,$needlesAsString[$ii], $offset);
    if(
$result !== FALSE  && $result < $index)
     
$index = $result;
  }
  return (
$index > strlen($haystack)? FALSE: $index);
}
?>

Example:
<?php
$test
="Ralph: One of these days, Alice!!";
$look_for=":!,";   // punctuation marks

$ss = 0;
while(
$answer=find_first_of($test,$look_for,$ss) ) {
  echo
$answer . "\n";
 
$ss = $answer+1;
 }
?>

This prints out:
5
24
31
32
Chuzasoft Inc. ARGENTINA
05-Aug-2008 07:16
Hi! Don't you people miss the pretty comparison operator 'LIKE' from mySql in PHP??.
I've made this funtion to emulate that method. It's for search a match string into another String
using the '%' caracter just like you do un the LIKE syntax.
For example:

<?php
$mystring
= "Hi, this is good!";
$searchthis = "%thi% goo%";

$resp = milike($mystring,$searchthis);

       
if (
$resp){
   echo
"milike = VERDADERO";
} else{
   echo
"milike = FALSO";
}

?>
Will print:
milike = VERDADERO

and so on...

this is the function:

<?php
function milike($cadena,$busca){
    if(
$busca=="") return 1;
   
   
$vi = split("%",$busca);
    
$offset=0;
    for(
$n=0;$n<count($vi);$n++){
        if(
$vi[$n]== ""){
            if(
$vi[0]== ""){
                  
$tieneini = 1;
            }
        } else {
           
$newoff=strpos($cadena,$vi[$n],$offset);
            if(
$newoff!==false){
                if(!
$tieneini){
                    if(
$offset!=$newoff){
                        return
false;
                    }
                }
                if(
$n==count($vi)-1){
                    if(
$vi[$n] != substr($cadena,strlen($cadena)-strlen($vi[$n]), strlen($vi[$n]))){
                        return
false;
                    }

                } else {
                   
$offset = $newoff + strlen($vi[$n]);
                 }
            } else {
                return
false;
            }
        }
    }
    return
true;
}
?>

Good luck!
paul at thiswayupdesign dot co dot uk
18-Jun-2008 10:48
I wasn't aware of the !== operator, only the === for false. I was using this code on strpos:

<?php
while( ! ($start=@strpos($source,$startTag,$end)) === false) {
 
// ...
}
?>

This gave a false if the string was found at position 0, which is weird.

However using

<?php
while(($start=@strpos($source,$startTag,$end)) !== false) {
 
// ...
}
?>

Gives no such error and seems to work correctly
pawhox
26-May-2008 01:19
Hello! I was founding a function, which finds any occurence of a string (no: first occurence). I wasn't, so I maked this function! It may be very useful.

<?php

int strnpos
(string $haystack, mixed $needle, int $occurence);

?>

Example:

<?php

strnpos
("I like the bananas. You like coke. We like chocolate.", "like", 2); // 24

?>

Here's code of this function:

<?php

function strnpos($base, $str, $n)
    {       
        if (
$n <= 0 || intval($n) != $n || substr_count($base, $str) < $n)  return FALSE;
       
       
$str = strval($str);
       
$len = 0;
       
        for (
$i=0 ; $i<$n-1 ; ++$i)
        {
            if (
strpos($base, $str) === FALSE ) return FALSE;
           
           
$len += strlen( substr($base, 0, strpos($base, $str) + strlen($str)) );
           
           
$base = substr($base, strpos($base, $str) + strlen($str) );
        }
        return
strpos($base, $str) + $len;
    }

?>
ilaymyhat-rem0ve at yahoo dot com
02-Apr-2008 12:17
This might be useful.

<?php
class String{
   
   
//Look for a $needle in $haystack in any position
   
public static function contains(&$haystack, &$needle, &$offset)
    {
       
$result = strpos($haystack, $needle, $offset);
        return
$result !== FALSE;
    }
   
   
//intuitive implementation .. if not found returns -1.
   
public static function strpos(&$haystack, &$needle, &$offset)
    {
       
$result = strpos($haystack, $needle, $offset);
        if (
$result === FALSE )
        {
            return -
1;
        }
        return
$result;
    }
   
}
//String
?>
Suggested re-write for pink WARNING box
11-Jan-2008 11:45
WARNING

As strpos may return either FALSE (substring absent) or 0 (substring at start of string), strict versus loose equivalency operators must be used very carefully.

To know that a substring is absent, you must use: 

=== FALSE

To know that a substring is present (in any position including 0), you can use either of:

!== FALSE  (recommended)
 > -1  (note: or greater than any negative number)

To know that a substring is at the start of the string, you must use: 

=== 0

To know that a substring is in any position other than the start, you can use any of:

 > 0  (recommended)
!= 0  (note: but not !== 0 which also equates to FALSE)
!= FALSE  (disrecommended as highly confusing)

Also note that you cannot compare a value of "" to the returned value of strpos. With a loose equivalence operator (== or !=) it will return results which don't distinguish between the substring's presence versus position. With a strict equivalence operator (=== or !==) it will always return false.
giulioNOSPAM at iunknown dot org
31-Oct-2007 10:19
A further implementation of the great rstrpos function posted in this page. Missing some parameters controls, but the core seems correct.

<?php
// Parameters:
//
// haystack : target string
// needle   : string to search
// offset   : which character in haystack to start searching, FROM THE END OF haystack
// iNumOccurrence : how many needle to search into haystack beginning from offset ( i.e. the 4th occurrence of xxx into yyy )

function rstrpos ($haystack, $needle, $offset=0, $iNumOccurrence=1)
  {
 
//
 
$size = strlen ($haystack);
 
$iFrom = $offset;
 
$iLoop = 0;
 
//
 
do
    {
   
$pos = strpos (strrev($haystack), strrev($needle), $iFrom);
   
$iFrom = $pos + strlen($needle);
    }
  while ((++
$iLoop)<$iNumOccurrence);
 
//
 
if($pos === false) return false;
 
//
 
return $size - $pos - strlen($needle);
  }
?>
Benjie
14-Oct-2007 11:49
str_replace evaluates its arguments exactly once.

for example:

<?php
$page
= str_replace("##randompicture##", getrandompicture(), $page);
?>

will call getrandompicture() once, ie it will insert the same random picture for each occurrence of ##randompicture## :(

Here is my quick and dirty workaround:

<?php
function add_random_pictures($text) {

  while ((
$i = strpos($text, "##randompicture##")) !== false) {
   
$text = substr_replace($text, getrandompicture(), $i, strlen("##randompicture##"));
  }
  return
$text;

}

$page = add_random_pictures($page);
?>
Wagner Christian
17-Aug-2007 08:11
If you plan to use an integer as needle you need first to convert your integer into a String else it's not going to work.

For exemple :
<?php
$id 
= 1;
$my_text = "hel124lo";
$first_position =strpos($my_text ,substr($id,0));
?>

There are for sure some another solutions to convert an integer into a string in php.
user at nomail dot com
15-May-2007 09:21
This is a bit more useful when scanning a large string for all occurances between 'tags'.

<?php
function getStrsBetween($s,$s1,$s2=false,$offset=0) {
   
/*====================================================================
    Function to scan a string for items encapsulated within a pair of tags

    getStrsBetween(string, tag1, <tag2>, <offset>

    If no second tag is specified, then match between identical tags

    Returns an array indexed with the encapsulated text, which is in turn
    a sub-array, containing the position of each item.

    Notes:
    strpos($needle,$haystack,$offset)
    substr($string,$start,$length)

    ====================================================================*/

   
if( $s2 === false ) { $s2 = $s1; }
   
$result = array();
   
$L1 = strlen($s1);
   
$L2 = strlen($s2);

    if(
$L1==0 || $L2==0 ) {
        return
false;
    }

    do {
       
$pos1 = strpos($s,$s1,$offset);

        if(
$pos1 !== false ) {
           
$pos1 += $L1;

           
$pos2 = strpos($s,$s2,$pos1);

            if(
$pos2 !== false ) {
               
$key_len = $pos2 - $pos1;

               
$this_key = substr($s,$pos1,$key_len);

                if( !
array_key_exists($this_key,$result) ) {
                   
$result[$this_key] = array();
                }

               
$result[$this_key][] = $pos1;

               
$offset = $pos2 + $L2;
            } else {
               
$pos1 = false;
            }
        }
    } while(
$pos1 !== false );

    return
$result;
}
?>
Rich Deeson
26-Apr-2007 03:58
Here's a somewhat more efficient way to truncate a string at the end of a word. This will end the string on the last dot or last space, whichever is closer to the cut off point. In some cases, a full stop may not be followed by a space eg when followed by a HTML tag.

<?php
    $shortstring
= substr($originalstring, 0, 400);
   
$lastdot = strrpos($shortstring, ".");
   
$lastspace = strrpos($shortstring, " ");
   
$shortstring = substr($shortstring, 0, ($lastdot > $lastspace? $lastdot : $lastspace));
?>

Obviously, if you only want to split on a space, you can simplify this:

<?php
    $shortstring
= substr($originalstring, 0, 400);
   
$shortstring = substr($shortstring, 0, strrpos($shortstring, " "));
?>
sinai [at] simnet [dot] is
11-Apr-2007 12:35
If you want to check for either IE6 or 7 individually.

<?php

function browserIE($version)
{
  if(
$version == 6 || $version == 7)
  {
   
$browser = strpos($_SERVER['HTTP_USER_AGENT'], "MSIE ".$version.".0;");
          
    if(
$browser == true)
    {
      return
true;
    }
    else
    {
      return
false;
    }
  else
  {
    return
false;
}

?>
gal_chen123 at hotmail dot co dot il
03-Apr-2007 04:57
this function returns the text between 2 strings:

<?php
function get_between ($text, $s1, $s2) {
   
$mid_url = "";
   
$pos_s = strpos($text,$s1);
   
$pos_e = strpos($text,$s2);
    for (
$i=$pos_s+strlen($s1) ; ( ( $i < ($pos_e)) && $i < strlen($text) ) ; $i++ ) {
       
$mid_url .= $text[$i];
    }
    return
$mid_url;
}
?>

if $s1 or $s2 are not found, $mid_url will be empty
to add an offset, simply compare $pos_s to the offset, and only let it continue if the offset is smaller then $pos_s.
jamie at jamiechong dot ca
19-Jan-2007 08:15
Try this function to find the first position of needle before a given offset.

For example:
<?php
$s
= "This is a test a is This";
$offset = strpos($s, "test");

strnpos($s, "is", $offset);  // returns 17
strnpos($s, "is", -$offset); // returns 5

// Works just like strpos if $offset is positive.
// If $offset is negative, return the first position of needle
// before before $offset.
function strnpos($haystack, $needle, $offset=0)
{
    if (
$offset>=0)
       
$result=strpos($haystack, $needle, $offset);
    else
    {
       
$offset=strlen($haystack)+$offset;
       
$haystack=strrev($haystack);
       
$needle=strrev($needle);
       
$result=strpos($haystack, $needle, $offset);
        if (
$result!==false)
        {
           
$result+=strlen($needle);
           
$result=strlen($haystack)-$result;
        }
    }
    return
$result;
}

?>
koteskie at gmail dot com
18-Dec-2006 10:31
I've been looking at previous posts and came up with this function to find the start and end off an certain occurance or all occurances of needle within haystack.

I've made some minor tweaks to the code itself, like  counting the length of needle only once and counting the result set array instead of using a count variable.

I also added a length parameter to the result set to use in a following substr_replace call etc...

<?php

function strpos_index($haystack = '',$needle = '',$offset = 0,$limit = 99,$return = null)
{
   
$length = strlen($needle);
   
$occurances = array();
    while(((
$count = count($occurances)) < $limit) && (false !== ($offset = strpos($haystack,$needle,$offset))))
    {
       
$occurances[$count]['length'] = $length;
       
$occurances[$count]['start'] = $offset;
       
$occurances[$count]['end'] = $offset = $offset + $length;
    }
    return
$return === null ? $occurances : $occurances[$return];
}
       
?>
spinicrus at gmail dot com
14-Oct-2006 05:58
if you want to get the position of a substring relative to a substring of your string, BUT in REVERSE way:

<?php

function strpos_reverse_way($string,$charToFind,$relativeChar) {
   
//
   
$relativePos = strpos($string,$relativeChar);
   
$searchPos = $relativePos;
   
$searchChar = '';
   
//
   
while ($searchChar != $charToFind) {
       
$newPos = $searchPos-1;
       
$searchChar = substr($string,$newPos,strlen($charToFind));
       
$searchPos = $newPos;
    }
   
//
   
if (!empty($searchChar)) {
       
//
       
return $searchPos;
        return
TRUE;
    }
    else {
        return
FALSE;
    }
   
//
}

?>
admin at xylotspace dot com
27-Sep-2006 02:33
Yay! I came up with a very useful function. This finds a beginning marker and an ending marker (the first after the beginning marker), and returns the contents between them. You specify an initial position in order to tell it where to start looking. You can use a while() or for() loop to get all occurence of a certain string within a string (for example, taking all hyperlinks in a string of HTML code)...

<?php
function get_middle($source, $beginning, $ending, $init_pos) {
   
$beginning_pos = strpos($source, $beginning, $init_pos);
   
$middle_pos = $beginning_pos + strlen($beginning);
   
$ending_pos = strpos($source, $ending, $beginning_pos + 1);
   
$middle = substr($source, $middle_pos, $ending_pos - $middle_pos);
    return
$middle;
}
?>

For example, to find the URL of the very first hyperlink in an HTML string $data, use:

$first_url = get_middle($data, '<a href="', '"', 0);

It's done wonders for scraping HTML pages with certain tools on my website.
chasesan at gmail dot com
12-Jul-2006 10:48
You can use strpos to produce a funciton that will find the nth instance of a certain string within a string. Personally I find this function almost more useful then strpos itself.

I kinda wish they would put it stock into php but I doupt thats gonna happen any time soon. ^_^

Here is da code:
<?php
//just like strpos, but it returns the position of the nth instance of the needle (yay!)
function strpos2($haystack, $needle, $nth = 1)
{
   
//Fixes a null return if the position is at the beginning of input
    //It also changes all input to that of a string ^.~
   
$haystack = ' '.$haystack;
    if (!
strpos($haystack, $needle))
        return
false;
   
$offset=0;
    for(
$i = 1; $i < $nth; $i++)
       
$offset = strpos($haystack, $needle, $offset) + 1;
    return
strpos($haystack, $needle, $offset) - 1;
}
?>
samuraj at xmail dot cz
24-Dec-2005 09:38
there was a code (from wodzuY2k at interia dot pl) removing all between <script> tags..
but it didn't work if the tag begins like <SCRIPT language=javascript type=text/javascript>

here is function removing all between "<script"  and  "/script>"

<?php

function remove_js($contents)           
{
  while(
true)
  {
  
$begPos = strpos($contents,"<script");
   if (
$begPos===false) break; //all tags were found & replaced.
  
$endPos = strpos($contents,"/script>",$begPos+strlen("<script"));
  
$tmp = substr($contents,0,$begPos);
  
$tmp .= substr($contents,$endPos+strlen("script>"));
  
$contents = $tmp;
   if (
$loopcontrol++>100) break; //loop infinity control
  
continue;  //search again
 
}
  return
$contents;

}

?>
Virtual Hunter root(at)autocrash(dot)ru
23-Dec-2005 03:44
If you want to find positions of all needle's in haystack,
you can use this one:

<?php
while (($pos=strpos($haystack,$needle,$pos+1))!==false) $pos_array[$i++]=$pos;
?>

But mind, that it will find from second char. You must use $pos=-1; before you want search from first char.

<?php
$haystack
="one two three one two three one two three one two three one";
$needle="one";

$pos=-1;
while ((
$pos=strpos($haystack,$needle,$pos+1))!==false) $pos_array[$i++]=$pos;
?>

RESULT:

$pos_array[0] = 0
$pos_array[1] = 14
$pos_array[2] = 28
$pos_array[3] = 42
$pos_array[4] = 56
csaba at alum dot mit dot edu
21-Nov-2005 02:00
<?php
function nthPos ($str, $needles, $n=1) {
   
//    finds the nth occurrence of any of $needles' characters in $str
    //  returns -1 if not found; $n<0 => count backwards from end
    //  e.g. $str = "c:\\winapps\\morph\\photos\\Party\\Phoebe.jpg";
    //       substr($str, nthPos($str, "/\\:", -2)) => \Party\Phoebe.jpg
    //       substr($str, nthPos($str, "/\\:", 4)) => \photos\Party\Phoebe.jpg
   
$pos = -1;
   
$size = strlen($str);
    if (
$reverse=($n<0)) { $n=-$n; $str = strrev($str); }
    while (
$n--) {
   
$bestNewPos = $size;
    for (
$i=strlen($needles)-1;$i>=0;$i--) {
       
$newPos = strpos($str, $needles[$i], $pos+1);
        if (
$newPos===false) $needles = substr($needles,0,$i) . substr($needles,$i+1);
        else
$bestNewPos = min($bestNewPos,$newPos); }
    if ((
$pos=$bestNewPos)==$size) return -1; }
    return
$reverse ? $size-1-$pos : $pos;
}
?>

Csaba Gabor from Vienna
dale at ucsc dot edu
11-Nov-2005 10:28
if you want need a fast function to find the first occurrence of any ch element of an needle array this function might be of use:
<?php
$eurl
= strpos_needle_array($text, array('"'=>0,'\''=>0,'>'=>0, ' '=>0, "\n"=>0), $surl);

function
strpos_needle_array(& $text, $needle_ary, $offset=0){   
    for(
$ch_pos=$offset;$ch_pos<strlen($text);$ch_pos++){
        if(isset(
$needle_ary[$text[$ch_pos]])){
            return
$ch_pos;
        }
    }
    return
false;
}
?>
info at quantummechanic dot com
06-Oct-2005 12:42
this function takes a space-deliminted string as a list of potential needles and runs it against another string as a haystack.

the number of positive matches of needles within the haystack is returned as a rounded percentile.

<?php
function keyMatch($needles,$haystack) {
   
$nArray=