我正在使用PHP来构建当前页面的URL。有时,URL的形式为
www.mydomian.com/myurl.html?unwantedthngs
是被请求的。我想删除?
及其后面的所有内容(querystring),这样得到的URL就变成:
www.mydomain.com/myurl.html
我当前的代码是:
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" .
$_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
?>
发布于 2011-08-08 03:02:53
您可以在第一次出现?
之前使用strtok
获取字符串
$url = strtok($_SERVER["REQUEST_URI"], '?');
strtok()
是在查询字符串中的?
之前直接提取子字符串的最简洁的技术。explode()
不那么直接,因为它必须生成一个可能包含两个元素的数组,必须通过该数组访问第一个元素。
当查询字符串丢失或潜在地改变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
)
---
发布于 2014-07-31 11:54:59
最佳解决方案:
echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
如果您要向同一个域提交表单,则不需要在中包含您的http://domain.com。
发布于 2011-08-07 07:23:12
$val = substr( $url, 0, strrpos( $url, "?"));
https://stackoverflow.com/questions/6969645
复制相似问题