• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • stristr()

    (PHP 4, PHP 5, PHP 7)

    strstr()函数的忽略大小写版本

    说明

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

    返回$haystack字符串从$needle第一次出现的位置开始到结尾的字符串。

    参数

    $haystack

    在该字符串中查找。

    $needle

    如果$needle不是一个字符串,那么它将被转换为整型并被视为字符顺序值。

    $before_needle

    若为TRUE,strstr()将返回$needle$haystack中的位置之前的部分(不包括 needle)。

    参数$needle$haystack将以不区分大小写的方式对待。

    返回值

    返回匹配的子字符串。如果$needle未找到,返回FALSE

    更新日志

    版本说明
    5.3.0新增可选的$before_needle参数。
    4.3.0stristr()变为二进制安全的。

    范例

    Example #1stristr()范例

    <?php
      $email = 'USER@EXAMPLE.com';
      echo stristr($email, 'e'); // 输出 ER@EXAMPLE.com
      echo stristr($email, 'e', true); // 自 PHP 5.3.0 起,输出 US
    ?>

    测试字符串的存在与否

    <?php
      $string = 'Hello World!';
      if(stristr($string, 'earth') === FALSE) {
        echo '"earth" not found in string';
      }
    // 输出: "earth" not found in string
    ?>

    使用非字符串 needle

    <?php
      $string = 'APPLE';
      echo stristr($string, 97); // 97 = 小写字母 a
    // 输出: APPLE
    ?>

    注释

    Note:此函数可安全用于二进制对象。

    参见

    • strstr()查找字符串的首次出现
    • strrchr()查找指定字符在字符串中的最后一次出现
    • stripos()查找字符串首次出现的位置(不区分大小写)
    • strpbrk()在字符串中查找一组字符的任何一个字符
    • preg_match()执行匹配正则表达式
    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
    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
    }
    ?>
    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".
    <?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
    ?>
    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
    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>'; 
    ?>
    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'
    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 ~]#

    上篇:stripslashes()

    下篇:strlen()