Yet another stripos for php4 alternative:
<?php
function stripos($haystack, $needle){
return strpos($haystack, stristr( $haystack, $needle ));
}
$strTest = "The brown fox jumped over the Fence";
echo stripos($strTest, 'fence');//30
?>
stripos
(PHP 5)
stripos — Findet das erste Vorkommen eines Strings, unabhängig von Groß- und Kleinschreibung
Beschreibung
$haystack
, string $needle
[, int $offset = 0
] )
Gibt die numerische Position des ersten Vorkommens von
needle innerhalb des Strings
haystack zurück.
Im Gegensatz zu strpos() ist stripos() unabhängig von Groß- und Kleinschreibung.
Parameter-Liste
-
haystack -
Die Zeichenkette, in der gesucht werden soll.
-
needle -
Beachten Sie, dass
needleeine Zeichenkette von einem oder mehreren Zeichen sein kann.Ist
needlekein String, wird der Parameter in einen Integerwert konvertiert, der dem Ordinalwert des Zeichens entspricht. -
offset -
Der optionale Parameter
offseterlaubt Ihnen anzugeben, ab welchem Zeichen inhaystackdie Suche begonnen werden soll. Die zurückgegebene Position bezieht sich jedoch auf den Anfang vonhaystack.
Rückgabewerte
Gibt die Position als Integer zurück.
Wenn needle nicht gefunden wird, gibt
stripos() den boolean-Wert FALSE zurück.
Diese Funktion kann sowohl das
boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird.
Weitere Informationen entnehmen Sie bitte dem Abschnitt über die
boolschen Typen. Benutzen Sie deshalb
den === Operator,
um den Rückgabewert dieser Funktion zu überprüfen.
Beispiele
Beispiel #1 stripos()-Beispiele
<?php
$findmich = 'a';
$meinstring1 = 'xyz';
$meinstring2 = 'ABC';
$pos1 = stripos($meinstring1, $findmich);
$pos2 = stripos($meinstring2, $findmich);
// 'a' ist natürlich nicht in 'xyz' enthalten
if ($pos1 === false) {
echo "Die Zeichenkette '$findmich' kommt nicht im String '$meinstring1' vor.";
}
// Beachten Sie die Verwendung von ===. Ein einfaches == funktioniert nicht wie
// erwartet, da 'a' an Position 0 (also erster!) Stelle steht
if ($pos2 !== false) {
echo "Die Zeichenkette '$findmich' wurde in '$meinstring2' an Position $pos2 gefunden";
}
?>
Anmerkungen
Hinweis: Diese Funktion ist binary safe.
Siehe auch
- strpos() - Sucht das erste Vorkommen des Suchstrings
- strrpos() - Findet das letzte Vorkommen eines Zeichens innerhalb einer Zeichenkette
- strrchr() - Sucht das letzte Vorkommen eines Zeichens in einem String
- substr() - Gibt einen Teil eines Strings zurück
- stristr() - Wie strstr, aber unabhängig von Groß- bzw. Kleinschreibung
- strstr() - Findet das erste Vorkommen eines Strings
- strripos() - Findet das letzte Vorkommen der gesuchten Zeichenkette in einem String, unabhängig von Groß- und Kleinschreibung
- str_ireplace() - Groß- und kleinschreibungsunabhängige Version von str_replace
stripos
03-Jul-2007 09:46
20-Mar-2007 01:57
(i'm very sorry for some mistakes in my yesterday's post :'[ )
this would to work with any language, i hope.
tested on czech (eastern europe) lang.
<?php
/****************************************
* SAFE HIGHLIGHT
****************************************/
/**
* 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))
return $subject;
// empty keys throw-off, only unique, reindex
$nA = array_values(
array_unique(
array_diff( $needleArr, array(''))
)
);
// needle count
if( !($nC = count( $nA)))
return $subject; // nothing to hl
// shear length
if( !(($rLL = mb_strlen( $rL = $shearLft, $e))
+ ($rRL = mb_strlen( $rR = $shearRgt, $e))))
return $subject; // no shears
// subject length
if( !($sL = mb_strlen( $s = $subject, $e)))
return 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++)
if( $m[ $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( $s, 0, $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( $m, 0, $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)
break;
} // while()
} // for( $n=0; $n<$nC; $n++)
// oouu yeaaa, kick the subject out of the function
return $s;
} // function safeHighlight()
/****************************************
* END: SAFE HIGHLIGHT
****************************************/
?>
16-Aug-2006 04:20
I recommend using the solution by rchillet for <PHP5
michiels solution is quite slow if you use it for long strings or call it many times.
10-Jul-2006 01:03
Since the stripos-function is PHP5-only, the function below could give PHP4-users the same functionallity:
function stripos($string,$word)
{
$retval = false;
for($i=0;$i<=strlen($string);$i++)
{
if (strtolower(substr($string,$i,strlen($word))) == strtolower($word))
{
$retval = true;
}
}
return $retval;
}
28-Apr-2006 10:45
improvement the function of heavyraptor with int offset parametre.
if (!function_exists("stripos")) {
function stripos($str,$needle,$offset=0)
{
return strpos(strtolower($str),strtolower($needle),$offset);
}
}
21-Mar-2006 03:59
If you're using PHP < 5, you can use this alternate function, same thing like stripos:
<?php
if (!function_exists("stripos")) {
function stripos($str,$needle) {
return strpos(strtolower($str),strtolower($needle));
}
}
?>
Such a logical function but I hope it helps ...
02-Oct-2004 07:17
Just to be explicit, the position index returned by strpos starts at 0, not 1. e.g. strpos('abc','a') returns 0.
30-May-2004 07:36
This functionality is now implemented in the PEAR package PHP_Compat.
More information about using this function without upgrading your version of PHP can be found on the below link:
http://pear.php.net/package/PHP_Compat