Bạn có thể sử dụng strtok
để có được chuỗi trước khi xuất hiện lần đầu tiên của?
$url = strtok($_SERVER["REQUEST_URI"], '?');
strtok()
đại diện cho kỹ thuật ngắn gọn nhất để trích xuất trực tiếp chuỗi con trước ?
chuỗi truy vấn. explode()
ít trực tiếp hơn vì nó phải tạo ra một mảng hai phần tử có khả năng mà phần tử đầu tiên phải được truy cập.
Một số kỹ thuật khác có thể bị hỏng khi chuỗi truy vấn bị thiếu hoặc có khả năng đột biến các chuỗi con khác / ngoài ý muốn trong url - những kỹ thuật này nên tránh.
Một cuộc biểu tình :
$urls = [
'www.example.com/myurl.html?unwantedthngs#hastag',
'www.example.com/myurl.html'
];
foreach ($urls as $url) {
var_export(['strtok: ', strtok($url, '?')]);
echo "\n";
var_export(['strstr/true: ', strstr($url, '?', true)]); // not reliable
echo "\n";
var_export(['explode/2: ', explode('?', $url, 2)[0]]); // limit allows func to stop searching after first encounter
echo "\n";
var_export(['substr/strrpos: ', substr($url, 0, strrpos( $url, "?"))]); // not reliable; still not with strpos()
echo "\n---\n";
}
Đầu ra:
array (
0 => 'strtok: ',
1 => 'www.example.com/myurl.html',
)
array (
0 => 'strstr/true: ',
1 => 'www.example.com/myurl.html',
)
array (
0 => 'explode/2: ',
1 => 'www.example.com/myurl.html',
)
array (
0 => 'substr/strrpos: ',
1 => 'www.example.com/myurl.html',
)
---
array (
0 => 'strtok: ',
1 => 'www.example.com/myurl.html',
)
array (
0 => 'strstr/true: ',
1 => false, // bad news
)
array (
0 => 'explode/2: ',
1 => 'www.example.com/myurl.html',
)
array (
0 => 'substr/strrpos: ',
1 => '', // bad news
)
---