Remove everything after a character in PHP

后端 未结 8 2704
无人共我
无人共我 2021-02-19 08:09

can any tell how to remove characters after ? in php. I have one string test?=new i need to remove the characters as well as = from that string.

相关标签:
8条回答
  • 2021-02-19 08:29

    Use the strstr function.

    <?php
    $myString = "test?=new";
    $result = strstr($myString, '=', true);
    
    echo $result ;
    

    The third parameter true tells the function to return everything before the first occurrence of the second parameter.

    0 讨论(0)
  • 2021-02-19 08:30

    This solution uses a simple regular expression to remove the ? character and all characters following it.

    $string = "test?p=new";
    $new_string = preg_replace("/\?.+/", "", $string);
    
    0 讨论(0)
  • 2021-02-19 08:31

    Shortest one:

    echo strtok('test?=new', '?');
    

    If you want to keep the question mark, the solution is almost the same:

    echo strtok('test?=new', '?').'?';
    
    0 讨论(0)
  • 2021-02-19 08:34

    You can do this with a well-written regex, but the much simpler and quicker way to do it is to explode the string on the "?" character, and use the first element in the resulting array.

    $str = "test?=new";
    $str2 = explode("?", $str);
    $use_this = $str2[0];
    

    $use_this[0] will be "test". If you want to add the "?" back, just concatenate:

    $use_this = $use_this."?";
    
    0 讨论(0)
  • 2021-02-19 08:39

    substr and strpos

    The simplest way to do this is with substr() DOCs and strpos() DOCs.

    $string = 'test?=new';
    $cut_position = strpos($string, '?') + 1; // remove the +1 if you don't want the ? included
    $string = substr($string, 0, $cut_position);
    

    As you can see substr() extracts a sub-string from a string by index and strpos() returns the index of the first instance of the character it is searching for (in this case ?).

    0 讨论(0)
  • 2021-02-19 08:43

    You could always try using preg_replace() as well:

    $string = 'test?q=new';
    $result = preg_replace("/\?.+/", "", $string);
    

    If, for some reason, you are wanting to keep the ? in the result... you could also do this:

    $string = 'test?q=new';
    $result = preg_replace("/\?.+/", "?", $string);
    

    (or, you could use a positive look-behind assertion, as @BlueJ774 suggested,) like this:

    $result = preg_replace("/(?<=\?).+/", "", $string);
    

    But ideally, and for future reference, if you are working with a query string, you probably will want to use parse_str at some point, like this:

    $string = 'test?q=new';
    parse_str($string, $output);
    

    Because that will give you an array ($output, in this case,) with which to work with all of the parts of the query string, like this:

    Array
    (
        [test?q] => new
    )
    

    But normally... you would probably just want to be working with the query string by this point... so the output would be more like this:

    Array
    (
        [q] => new
    )
    
    0 讨论(0)
提交回复
热议问题