所以测试用例字符串可能是:
http://example.com/?u=ben
或者
http://example.com
我试图在最后一次出现“/”之后删除所有内容,但前提是它不属于“http://”。这可能吗!?
到目前为止我有这个:
$url = substr($url, 0, strpos( $url, '/'));
但不起作用,在第一个'/'之后剥离所有内容。
您必须使用 strrpos 函数而不是 strpos ;-)
substr($url, 0, strrpos( $url, '/'));
您应该使用专为此类作业设计的工具parse_url
网址.php
<?php
$urls = array('http://example.com/foo?u=ben',
'http://example.com/foo/bar/?u=ben',
'http://example.com/foo/bar/baz?u=ben',
'https://foo.example.com/foo/bar/baz?u=ben',
);
function clean_url($url) {
$parts = parse_url($url);
return $parts['scheme'] . '://' . $parts['host'] . $parts['path'];
}
foreach ($urls as $url) {
echo clean_url($url) . "\n";
}
例子:
·> php url.php
http://example.com/foo
http://example.com/foo/bar/
http://example.com/foo/bar/baz
https://foo.example.com/foo/bar/baz
实际上,您想要实现的一个更简单的解决方案是使用 PHP 的一些字符串操作函数。
首先,您需要找到“/”最后一次出现的位置。您可以使用 strrpos() 函数来做到这一点(小心,它是 2 r);
然后,如果您将此位置作为负值提供,作为 substr() 函数的第二个参数,它将从末尾开始搜索子字符串。
第二个问题是你想要最后一个'/'左侧的字符串部分。为此,您必须为 substr() 提供一个负值给第三个参数,这将指示您要删除多少个字符。
要确定需要删除多少个参数,您必须先提取“/”右侧的字符串部分,然后计算其长度。
//so given this url:
$current_url = 'http://example.com/firstslug/84'
//count how long is the part to be removed
$slug_tbr = substr($current_url, strrpos($current_url, '/')); // '/84'
$slug_length = strlen(slug_tbr); // (3)
/*get the final result by giving a negative value
to both second and third parameters of substr() */
$back_url = substr($current_url, -strrpos($current_url, '/'), -$slug_length);
//result will be http://example.com/firstslug/
$cutoff = explode("char", $string);
echo $cutoff[0]; // 2 for what you want and 3 for the index
还
echo str_replace("http://", "", $str);