php subdomain.domain 推定为 str_replace 的扩展
php subdomain.domain presumed as extension on str_replace
我正在尝试从我的本地域中删除 filename.extension
本地域虚拟主机:http://cms.local/
和 str_replace 我正在尝试删除 index.php
以保持动态我主要关心的是考虑 filename.extension
可以是任何东西的事实。
我的代码:
private static function removeFilename($url) {
$file_info = pathinfo($url);
return isset($file_info['extension']) ? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url) : $url;
}
其中 $url
未解析 url 基于 this post。
考虑到我的 url 是 http://cms.local/index.php
一切都很顺利,但万一我的 url 只是 http://cms.local/
;没有 filename.extension,str_replace
函数删除 cms.local
,就好像它是 filename.extension,只留下 http:///
.
提前致谢!
private static function removeFilename($url) {
return substr($url, 0, strrpos($url, '/') + 1);
}
substr()
Returns 由起始和长度参数指定的字符串部分。
strrpos()
找到 needle 在 haystack 字符串中最后一次出现的数字位置。
如果 url 是没有最后一个斜杠的 http://cms.local,这将不起作用。
编辑
如果您需要保留查询字符串并仅删除文件名 + 扩展名:
function removeFilename($url) {
$queryString = parse_url($url, PHP_URL_QUERY);
return substr($url, 0, strrpos($url, '/') + 1) . "?" . $queryString;
}
parse_url()
function parses a URL and returns an associative array containing any
of the various components of the URL that are present. The values of
the array elements are not URL decoded.
component
Specify one of PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT,
PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or
PHP_URL_FRAGMENT to retrieve just a specific URL component as a string
(except when PHP_URL_PORT is given, in which case the return value
will be an integer).
编辑 2
如果 url 是 http://cms.local
,则添加尾部斜杠的最终解决方案
private static function addTrailingSlash($url) {
$url = parse_url($url);
if(!isset($url['path'])) $url['path'] = '/';
$surl = $url['scheme']."://".$url['host'].$url['path'].'?'.$url['query'];
return $surl;
}
private static function removeFilename($url) {
$url = addTrailingSlash($url);
$queryString = parse_url($url, PHP_URL_QUERY);
return substr($url, 0, strrpos($url, '/') + 1) . "?" . $queryString;
}
我正在尝试从我的本地域中删除 filename.extension
本地域虚拟主机:http://cms.local/
和 str_replace 我正在尝试删除 index.php
以保持动态我主要关心的是考虑 filename.extension
可以是任何东西的事实。
我的代码:
private static function removeFilename($url) {
$file_info = pathinfo($url);
return isset($file_info['extension']) ? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url) : $url;
}
其中 $url
未解析 url 基于 this post。
考虑到我的 url 是 http://cms.local/index.php
一切都很顺利,但万一我的 url 只是 http://cms.local/
;没有 filename.extension,str_replace
函数删除 cms.local
,就好像它是 filename.extension,只留下 http:///
.
提前致谢!
private static function removeFilename($url) {
return substr($url, 0, strrpos($url, '/') + 1);
}
substr()
Returns 由起始和长度参数指定的字符串部分。
strrpos()
找到 needle 在 haystack 字符串中最后一次出现的数字位置。
如果 url 是没有最后一个斜杠的 http://cms.local,这将不起作用。
编辑
如果您需要保留查询字符串并仅删除文件名 + 扩展名:
function removeFilename($url) {
$queryString = parse_url($url, PHP_URL_QUERY);
return substr($url, 0, strrpos($url, '/') + 1) . "?" . $queryString;
}
parse_url()
function parses a URL and returns an associative array containing any of the various components of the URL that are present. The values of the array elements are not URL decoded.component
Specify one of PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or PHP_URL_FRAGMENT to retrieve just a specific URL component as a string (except when PHP_URL_PORT is given, in which case the return value will be an integer).
编辑 2 如果 url 是 http://cms.local
,则添加尾部斜杠的最终解决方案private static function addTrailingSlash($url) {
$url = parse_url($url);
if(!isset($url['path'])) $url['path'] = '/';
$surl = $url['scheme']."://".$url['host'].$url['path'].'?'.$url['query'];
return $surl;
}
private static function removeFilename($url) {
$url = addTrailingSlash($url);
$queryString = parse_url($url, PHP_URL_QUERY);
return substr($url, 0, strrpos($url, '/') + 1) . "?" . $queryString;
}