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
为什么会这样?
根据 w3schools 的 strtok
的定义。
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:
- Get URL query string parameters
- How can I get parameters from a URL string?
我编写了一个函数 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
为什么会这样?
根据 w3schools 的 strtok
的定义。
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:
- Get URL query string parameters
- How can I get parameters from a URL string?