我寫了一個函式 getQuery($param) 從
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
但如果 URL 引數包含“6”,則此函式僅回傳查詢資料,直到該字符
//i.e. if URL = https://example.com/test?name=Arun&[email protected]
echo getQuery("email"); // Expected Output: [email protected]
// Original Output: arun05
有什么解決方案可以修復這個錯誤嗎?有人請幫忙
編輯:
謝謝回復。我找到了另一種方法來撰寫這個函式
<?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];
}
這作業得很好??
uj5u.com熱心網友回復:
您的函式是獲取查詢引數的一種非常復雜的方法。您可以簡單地使用$_GET['email']來獲取電子郵件。如果未設定,您還應該應用默認值。
$email = $_GET['email'] ?? false;
如果你想把它變成一個輔助函式,
function getQuery($key, $default = ''): string
{
return $_GET[$key] ?? $default;
}
$email = getQuery('email');
6如果查詢字串中有 a ,它被截斷的原因是因為這一行。
是的,我可以使用 $_GET。但是,我開發了一個簡單的路由系統。在這個 $GET 中不起作用。所以,我不得不撰寫這個 getQuery() 函式。
這對我來說沒有多大意義,但如果你想使用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');
uj5u.com熱心網友回復:
首先,您必須知道您的代碼到底在做什么。比如為什么你需要一個函式來使用?
但如果 URL 引數包含“6”,則此函式僅回傳查詢資料,直到該字符
為什么會這樣?
strtok根據w3schools的定義。
strtok() 函式將字串拆分為更小的字串(令牌)。
第二個引數用于:
指定一個或多個拆分字符
那么,為什么郵件只在“6”字符之前回傳呢?這是因為 的值PHP_URL_QUERY是6 reference。
所以這就像我們寫的:
strtok($_SERVER['REQUEST_URI'], 6)
然后從你提供的 URL 中,它會變成這樣:
strtok('https://example.com/test?name=Arun&[email protected]', 6)
// You got https://example.com/test?name=Arun&email=arun05
它按字符 6 分割 URL。
因此,對于最后的話,如果您只想從 URL 字串中獲取查詢引數。我認為很容易找到已經回答的問題。
請檢查以下鏈接:
- 獲取 URL 查詢字串引數
- 如何從 URL 字串中獲取引數?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/425888.html
