The 5th Annual China PHP Conference


(PHP 4, PHP 5, PHP 7)

stristr大文字小文字を区別しない strstr()


string stristr ( string $haystack , mixed $needle [, bool $before_needle = false ] )

haystack において needle が最初に見つかった位置を含めてそこから最後までを返します。





needle が文字列でない場合は、 それを整数に変換し、その番号に対応する文字として扱います。


TRUE にすると、stristr() の返り値は、haystack の中で最初に needle があらわれる箇所より前の部分となります (needle は含めません)。

needle および haystack は大文字小文字を区別せずに評価されます。


マッチした部分文字列を返します。needle が見つからない場合は FALSE を返します。


バージョン 説明
5.3.0 オプションの before_needle パラメータが追加されました。
4.3.0 stristr() がバイナリセーフとなりました。

例1 stristr() の例

stristr($email'e'); // 出力は となります
echo stristr($email'e'true); // PHP 5.3.0 以降では、出力は US となります

例2 文字列が見つかるかどうかをテストする

'Hello World!';
stristr($string'earth') === FALSE) {
'"earth" not found in string';
// 出力は "earth" not found in string となります

例3 文字列以外の needle の指定

stristr($string97); // 97 = 小文字の a
// 出力は APPLE となります


注意: この関数はバイナリデータに対応しています。


  • strstr() - 文字列が最初に現れる位置を見つける
  • strrchr() - 文字列中に文字が最後に現れる場所を取得する
  • stripos() - 大文字小文字を区別せずに文字列が最初に現れる位置を探す
  • strpbrk() - 文字列の中から任意の文字を探す
  • preg_match() - 正規表現によるマッチングを行う

add a note add a note

User Contributed Notes 8 notes

14 years ago
There was a change in PHP 4.2.3 that can cause a warning message
to be generated when using stristr(), even though no message was
generated in older versions of PHP.

The following will generate a warning message in 4.0.6 and 4.2.3:
  stristr("haystack", "");
  $needle = "";  stristr("haystack", $needle);

This will _not_ generate an "Empty Delimiter" warning message in
4.0.6, but _will_ in 4.2.3:
  unset($needle); stristr("haystack", $needle);

Here's a URL that documents what was changed:
Techdeck at Techdeck dot org
14 years ago
An example for the stristr() function:

= "I like php";
if (
stristr("$a", "LikE PhP")) {
print (
"According to \$a, you like PHP.");

It will look in $a for "like php" (NOT case sensetive. though, strstr() is case-sensetive).

For the ones of you who uses linux.. It is similiar to the "grep" command.
Actually.. "grep -i".
giz at gbdesign dot net
9 years ago
Just been caught out by stristr trying to converting the needle from an Int to an ASCII value.

Got round this by casting the value to a string.

if( !stristr( $file, (string) $myCustomer->getCustomerID()  ) ) {
// Permission denied
art at awilton dot dotcom
11 years ago
handy little bit of code I wrote to take arguments from the command line and parse them for use in my apps.


= implode(" ",$argv); //implode all the settings sent via clie
$e = explode("-",$i); // no lets explode it using our defined seperator '-'

       //now lets parse the array and return the parameter name and its setting
       // since the input is being sent by the user via the command line
       //we will use stristr since we don't care about case sensitivity and
       //will convert them as needed later.

while (list($index,$value) = each($e)){

//lets grap the parameter name first using a double reverse string
       // to get the begining of the string in the array then reverse it again
       // to set it back. we will also "trim" off the "=" sign

$param = rtrim(strrev(stristr(strrev($value),'=')),"=");

//now lets get what the parameter is set to.
       // again "trimming" off the = sign

$setting = ltrim(stristr($value,'='),"=");

// now do something with our results.
       // let's just echo them out so we can see that everything is working

echo "Array index is ".$index." and value is ".$value."\r\n";
"Parameter is ".$param." and is set to ".$setting."\r\n\r\n";



when run from the CLI this script returns the following.

[root@fedora4 ~]# php a.php -val1=one -val2=two -val3=three

Array index is 0 and value is a.php
Parameter is  and is set to

Array index is 1 and value is val1=one
Parameter is val1 and is set to one

Array index is 2 and value is val2=two
Parameter is val2 and is set to two

Array index is 3 and value is val3=three
Parameter is val3 and is set to three

[root@fedora4 ~]#
notepad at codewalkers dot com
11 years ago

function stristr_reverse($haystack, $needle) {
$pos = stripos($haystack, $needle) + strlen($needle);
substr($haystack, 0, $pos);
$email = '';
stristr_reverse($email, 'er');
// outputs USER

3 years ago
I think there is a bug in php 5.3 in stristr with uppercase Ä containing other character

if you search only with täry it works, but as soon as the word is tärylä  it does not. TÄRYL works fine
greg at no_ggmac_reply dot com
6 years ago
Beware the example given here:

if stristr($message,'viagra')
or stristr($message,'cialis')

stristr does not search for words, it finds matching substrings.  So, for example, the check for 'cialis' will trigger on 'specialist'
tomas dot nesrovnal at yourspirit dot cz
8 years ago
Active item item in menu:

function aim($page) {
stristr($_SERVER['REQUEST_URI'], $page)) {
' class="active"';


<style type="text/css">
.active {color: red;}

print '<a href=""'. aim('hello-world') .'>HW</a>';
To Top