Możesz użyć, strtok
aby uzyskać ciąg przed pierwszym wystąpieniem?
$url = strtok($_SERVER["REQUEST_URI"], '?');
strtok()
reprezentuje najbardziej zwięzłą technikę bezpośredniego wyciągania podłańcucha przed ?
kwerendą. explode()
jest mniej bezpośredni, ponieważ musi wytworzyć potencjalnie dwuelementową tablicę, za pomocą której należy uzyskać dostęp do pierwszego elementu.
Niektóre inne techniki mogą się zepsuć, gdy brakuje kwerendy lub potencjalnie mutować inne / niezamierzone podciągi w adresie URL - technik tych należy unikać.
demonstracja :
$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";
}
Wynik:
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
)
---