©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5)
stristr — strstr() 函数的忽略大小写版本
$haystack
, mixed $needle
[, bool $before_needle
= false
] )
返回 haystack
字符串从 needle
第一次出现的位置开始到结尾的字符串。
haystack
在该字符串中查找。
needle
如果 needle
不是一个字符串,那么它将被转换为整型并被视为字符顺序值。
before_needle
若为 TRUE
, strstr() 将返回 needle
在 haystack
中的位置之前的部分(不包括 needle)。
参数 needle
和 haystack
将以不区分大小写的方式对待。
返回匹配的子字符串。如果 needle
未找到,返回 FALSE
。
版本 | 说明 |
---|---|
5.3.0 |
新增可选的 before_needle 参数。
|
4.3.0 | stristr() 变为二进制安全的。 |
Example #1 stristr() 范例
<?php
$email = 'USER@EXAMPLE.com' ;
echo stristr ( $email , 'e' ); // 输出 ER@EXAMPLE.com
echo stristr ( $email , 'e' , true ); // 自 PHP 5.3.0 起,输出 US
?>
Example #2 测试字符串的存在与否
<?php
$string = 'Hello World!' ;
if( stristr ( $string , 'earth' ) === FALSE ) {
echo '"earth" not found in string' ;
}
// 输出: "earth" not found in string
?>
Example #3 使用非字符串 needle
<?php
$string = 'APPLE' ;
echo stristr ( $string , 97 ); // 97 = 小写字母 a
// 输出: APPLE
?>
Note: 此函数可安全用于二进制对象。
[#1] jukka [2014-05-23 10:33:40]
I think there is a bug in php 5.3 in stristr with uppercase ? containing other character
http://pastebin.com/5bP6uztY
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
[#2] greg at no_ggmac_reply dot com [2011-01-13 01:20:50]
Beware the example given here:
if stristr($message,'viagra')
or stristr($message,'cialis')
)
{
die();
}
stristr does not search for words, it finds matching substrings. So, for example, the check for 'cialis' will trigger on 'specialist'
[#3] tomas dot nesrovnal at yourspirit dot cz [2008-12-18 12:36:26]
Active item item in menu:
<?php
function aim($page) {
if(stristr($_SERVER['REQUEST_URI'], $page)) {
return ' class="active"';
}
}
?>
usage:
<style type="text/css">
.active {color: red;}
</style>
<?php
print '<a href="http://example.com/page/hello-world/"'. aim('hello-world') .'>HW</a>';
?>
[#4] giz at gbdesign dot net [2007-10-06 05:02:41]
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.
<?php
if( !stristr( $file, (string) $myCustomer->getCustomerID() ) ) {
// Permission denied
}
?>
[#5] art at awilton dot dotcom [2005-11-07 09:17:49]
handy little bit of code I wrote to take arguments from the command line and parse them for use in my apps.
<?php
$i = 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";
echo "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 ~]#
[#6] notepad at codewalkers dot com [2005-06-05 01:02:25]
<?php
function stristr_reverse($haystack, $needle) {
$pos = stripos($haystack, $needle) + strlen($needle);
return substr($haystack, 0, $pos);
}
$email = 'USER@EXAMPLE.com';
echo stristr_reverse($email, 'er');
// outputs USER
?>
[#7] Techdeck at Techdeck dot org [2002-11-12 12:26:34]
An example for the stristr() function:
<?php
$a = "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".
[#8] dpatton.at.confluence.org [2002-10-02 21:36:01]
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", "");
OR
$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:
http://groups.google.ca/groups?selm=cvshholzgra1031224321%40cvsserver