php 中的 url 函数自定义获取查询

custom get query from url function in php

我编写了一个函数 getQuery($param),其中 returns 来自

的数据
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=arun@example.com

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

但如果 URL 参数包含“6”,则此函数仅返回查询数据直到该字符

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

是否有解决此错误的解决方案?有人帮忙

Edit:

感谢您的回复。我找到了另一种写这个函数的方法

<?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];
}

效果很好

您的函数是一种非常复杂的获取查询参数的方法。您可以简单地使用 $_GET['email'] 来获取电子邮件。如果未设置,您还应该应用默认值。

$email = $_GET['email'] ?? false;

如果你想把它变成一个辅助函数,

function getQuery($key, $default = ''): string 
{
    return $_GET[$key] ?? $default;
}

$email = getQuery('email');

如果查询字符串中有 6,它被截断的原因是因为这一行。 strtok 将通过分隔符标记字符串,但您提供了 PHP_URL_QUERY 作为分隔符。这是一个预定义的 PHP 常量,值为 6。所以 strtok 将在 6.

上拆分字符串
strtok($_SERVER['REQUEST_URI'], PHP_URL_QUERY)


Yes, I can use $_GET. but, I developed a simple routing system. In this $GET is not working. So, I had to write this getQuery() function.

这对我来说意义不大,但如果您想使用 parse_url,您可以这样做。但是要知道 $_GET 也可以在 ? 之后获取所有内容。

function getQuery($key, $default = ''): string
{
    $parts = parse_url($_SERVER['REQUEST_URI']);
    parse_str($parts['query'], $query);
    
    return $query[$key] ?? $default;
}

$email = getQuery('email');

首先,您必须知道您的代码究竟在做什么。比如为什么你需要一个函数来使用?

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

为什么会这样?

根据 w3schoolsstrtok 的定义。

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

其中第二个参数用于:

Specifies one or more split characters

那么,为什么邮件只在“6”字符之前返回呢? 这是因为 PHP_URL_QUERY 的值是 6 reference.

所以这就像我们写的:

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

然后从你给的 URL 开始,它会变成这样:

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

将URL分割成6个字符


所以,对于最后的话,如果您只想从 URL 字符串中获取查询参数。我认为很容易找到已经回答的问题。

请检查下面的link:

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