2012-02-22 47 views
3

可以說我有$url="../folder/file",我想查找並刪除../部件。PHP trim()問題

我使用trim() ...

$url = trim($url,"../"); 

...但它給了我一個警告:

警告:TRIM()[function.trim]:無效的」 ..'-範圍,沒有字符在'..'的左邊上方

我做錯了什麼?

+0

如果你只是從字符串的* front *去除'../',只需使用[ltrim()](http://php.net/ltrim)。 – shea 2013-03-19 06:36:59

回答

0

有一個從php.net/trim在裝飾功能的特殊語法,允許您指定一個範圍,這是什麼解釋認爲你是因爲做「..」

// trim the ASCII control characters at the beginning and end of $binary 
// (from 0 to 31 inclusive) 
$clean = trim($binary, "\x00..\x1F"); 
var_dump($clean); 

的第二個參數修剪應該是一串將被剝離的字符,所以你不應該把'。'兩次。

4

你做了什麼錯是無法閱讀手冊:

隨着..你可以指定一個字符範圍。

<?php 
$url="../folder/file"; 
$url = trim($url,"\.\./"); 
echo $url; 
?> 
+1

+1:這是提供可行解決方案的唯一答案:轉義兩個點 – shea 2013-03-19 06:35:35

+0

這不是唯一可行的解​​決方案。這實際上是一個誤導性的解決方案。您只需要在要修剪一次的字符列表中指定點。第二個參數不是要修剪的子字符串,而是要修剪的字符列表。如果他的字符串是「..... /文件夾/文件」,指定一個點將仍然有效。 – jmkelm08 2013-07-19 18:37:15

+0

@ jmkelm08其實@shea是對的,誤導性答案是你的。用戶想要刪除'../'部分;如果你只指定了一個單獨的文件,它會刪除它,正確的...但也會刪除一個潛在的'./'部分,它不是*用戶想要的。所以逃避這兩個點是正確的答案。 – Pere 2015-10-06 16:56:47

2

可以使用LTRIM

echo ltrim("../folder/file", "./"); 

echo trim("../folder/file", "./"); 
+0

如果字符串不包含點,我收到相同的錯誤。然而,逃避上述答案中的點。 – 2016-11-11 10:37:57

0

的第二個參數的微調功能指定被剝離,而不是一個多字符串的字符的列表。該函數將「..」解釋爲指定一系列字符的運算符(如a..z或1..5)。您可以通過多種方式剝離出「../」,但一個簡單的一個是這樣的:

$parts = explode('/', $url); 
array_shift($parts); 
$url = implode('/', $parts); 
0

我在php.net,似乎做了什麼裝飾頁面底部評論發現這個功能你想要

function trimString($input, $string){ 
     $input = trim($input); 
     $startPattern = "/^($string)+/i"; 
     $endPattern = "/($string)+$/i"; 
     return trim(preg_replace($endPattern, '', preg_replace($startPattern,'',$input))); 
}