我在PHP中运行以下代码。我的意图是在响应中获得“contact.html”,但我在输出中实际获得的是“ntact.html”
$str = 'http://localhost/contact.html';
echo $str . "<br>";
echo ltrim($str,'http://localhost');
有任何想法为什么PHP会以这种方式运行,我该怎么做才能解决这个问题?
答案 0 :(得分:4)
ltrim
没有按照您的想法行事。
它使用字符集合,因此删除其中的所有字符。
您应该使用str_replace
删除子字符串。
http://php.net/manual/en/function.str-replace.php
$str = 'http://localhost/contact.html';
echo $str . "<br>";
echo str_replace('http://localhost/', '', $str);
输出:
http://localhost/contact.html
contact.html
我确实意识到您只是尝试替换字符串开头的字符串,但如果字符串后面有http://localhost,则可能会遇到更大的问题。
关于ltrim的文档:http://php.net/manual/en/function.ltrim.php(Hello World示例在解释ltrim正在做什么时应该具有启发性)
ltrim滥用的另一个例子: PHP ltrim behavior with character list
答案 1 :(得分:3)
你必须使用爆炸
$str = 'http://localhost/contact.html';
$arr = explode('/', $str);
echo $arr[count($arr) - 1];
答案 2 :(得分:2)
来自ltrim()
的手册(强调我的):
您还可以通过character_mask参数指定要删除的字符。 只需列出要删除的所有字符。使用
..
,您可以指定一系列字符。
这意味着您列出了一组要删除的字符,而不是单词/字符串。这是一个例子。
$str = "foo";
echo ltrim($str, "for"); // Removes everything, because it encounters an F, then two O, outputs ""
echo ltrim($str, "f"); // Removes F only, outputs "oo"
echo ltrim($str, "o"); // Removes nothing, outputs "foo"
这意味着将删除字符掩码中列出的任何字符。相反,您可以通过str_replace()
删除字符串的开头,方法是将http://localhost
替换为空字符串。
$str = 'http://localhost/contact.html';
echo $str . "<br>";
echo str_replace('http://localhost', '', $str);
答案 3 :(得分:2)
其他答案解释了为什么ltrim
没有按照您的想法行事,但可能是这项工作的更好工具。
您的字符串是一个网址。 PHP has a built-in function to handle those neatly.
echo parse_url($str, PHP_URL_PATH);
(parse_url
会返回带有前导斜杠的路径。如果您需要将其删除,那么然后 ltrim
将会正常工作,因为您只需修剪一个字符。)
答案 4 :(得分:1)
ltrim起作用,character_mask
中的http://localhost
无法匹配。
输出将如此ntact.html
为什么?
它将与http://localhost
匹配,之后会有/
它会删除它,因为它是字符掩码等等。
为什么停在n
,因为它不在您的包机掩码中。
因此,除非字符掩码中没有匹配项,否则ltrim将继续删除
$str = 'http://localhost/contact.html';
echo ltrim($str, 'http');// output ://localhost/contact.html
在这里我只会在面具/
中添加一个,它会删除//
$str = 'http://localhost/contact.html';
echo ltrim($str, 'http:/');// output localhost/contact.html
答案 5 :(得分:0)
据我所知,ltrim()
用于从字符串的开头剥离空格。 See documentation
如果您想在http://localhost/
之后使用字符串,可以使用substr():
$str = 'http://localhost/contact.html';
echo $str . "<br>";
echo substr($str,18); // 18 is the length + 1 of http://localhost/