'custom get query from url function in php

I wrote a function getQuery($param) which returns data from the

function getQuery($param){
    if(!empty(parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY))){
    $queries = parse_url(strtok($_SERVER['REQUEST_URI'], PHP_URL_QUERY))['query'];
    parse_str($queries, $query);
    return $query[$param];
    }
}

//url = https://example.com/test?name=Arun&[email protected]

echo getQuery("name"); // Output will be:Arun

But if the URL parameters contain "6" this function is only returning query data until that character

//i.e. if URL = https://example.com/test?name=Arun&[email protected]
echo getQuery("email");   //  Expected Output: [email protected]
                        //  Original Output: arun05

Is there any solution to fix this bug? Someone, please help

Edit:

Thanks for the reply. I found another method to write this function

<?php
function testgetQuery($param){
    $queries = explode("&",explode("?",$_SERVER['REQUEST_URI'])[1]);
    $getQuery = [];
    foreach($queries as $query){
        $getQuery[explode("=", $query)[0]] = explode("=", $query)[1];
    }
    return $getQuery[$param];
}

This worked pretty well 😄



Solution 1:[1]

First, you must know what exactly your code doing. Like why you need a function to use?

But if the URL parameters contain "6" this function is only returning query data until that character

Why that happened?

By the definition of strtok from w3schools.

The strtok() function splits a string into smaller strings (tokens).

Where the second parameter is used to:

Specifies one or more split characters

So, why the email only returned before the character of "6"? It is because the value of PHP_URL_QUERY is 6 reference.

So this is like we wrote:

strtok($_SERVER['REQUEST_URI'], 6)

And then from the URL you give, it going to this:

strtok('https://example.com/test?name=Arun&[email protected]', 6)
// You got https://example.com/test?name=Arun&email=arun05

It splitted the URL by the character of 6.


So, for the final words, if you just want to get the query parameter from a URL string. I think it is easy to find already answered questions.

Please check the link below:

  1. Get URL query string parameters
  2. How can I get parameters from a URL string?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nur Muhammad