PHP ltrim没有返回我期待的东西

时间:2017-09-22 21:52:02

标签: php

我在PHP中运行以下代码。我的意图是在响应中获得“contact.html”,但我在输出中实际获得的是“ntact.html”

$str = 'http://localhost/contact.html';
echo $str . "<br>";
echo ltrim($str,'http://localhost');

有任何想法为什么PHP会以这种方式运行,我该怎么做才能解决这个问题?

6 个答案:

答案 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/