Remove all characters after a specific character

21,600

Solution 1

Shortest one:

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

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

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

Solution 2

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
)

Solution 3

Why not:

$pos = strpos($str, '?'); // ? position
$str = substr($str, 0, $pos);

Solution 4

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."?";

Solution 5

Here is one-liner:

$s = strpos($s, '?') !== FALSE ? strtok($s, '?') : $s;

You can test it by the following command-line:

php -r '$s = "123?456"; $s = strpos($s, "?") !== FALSE ? strtok($s, "?") : $s; echo $s;'
Share:
21,600
Anish
Author by

Anish

Updated on November 05, 2021

Comments

  • Anish
    Anish over 2 years

    Can anyone tell me how to remove characters after ? in php. I have a string test?q=new and I need to remove the characters from the ? to the end of the string.