strtok
처음 발생하기 전에 문자열을 얻는 데 사용할 수 있습니다.?
$url = strtok($_SERVER["REQUEST_URI"], '?');
strtok()
은 ?
쿼리 문자열에서 하위 문자열을 직접 추출하는 가장 간결한 기술을 나타냅니다 . explode()
첫 번째 요소에 액세스해야하는 잠재적으로 2 요소 배열을 생성해야하기 때문에 덜 직접적입니다.
쿼리 문자열이 누락되거나 URL에서 다른 / 의도하지 않은 하위 문자열을 잠재적으로 변경하면 일부 다른 기술이 중단 될 수 있습니다. 이러한 기술은 피해야합니다.
데모 :
$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";
}
산출:
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
)
---