假设我有$url="../folder/file"
,我想查找并删除../
部分。
我正在使用trim()
...
$url = trim($url,"../");
......但它给了我一个警告:
警告:trim()[function.trim]:无效' ..' -range,' ..'左边没有字符。在上面
我做错了什么?
答案 0 :(得分:6)
你做错了是没有阅读手册:
使用..您可以指定一系列字符。
<?php
$url="../folder/file";
$url = trim($url,"\.\./");
echo $url;
?>
答案 1 :(得分:2)
你可以使用ltrim
echo ltrim("../folder/file", "./");
或
echo trim("../folder/file", "./");
答案 2 :(得分:1)
php.net/trim的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);
trim的第二个参数应该是一个可以被剥离的字符串,所以你不应该把'。'两次。
答案 3 :(得分:0)
trim函数的第二个参数指定要剥离的字符列表,而不是多字符字符串。该函数将'..'解释为指定字符范围的运算符(如a..z或1..5)。您可以通过多种方式删除“../”,但其中一个很简单:
$parts = explode('/', $url);
array_shift($parts);
$url = implode('/', $parts);
答案 4 :(得分:0)
我在php.net上的trim页面的底部注释中找到了这个函数,似乎可以做你想要的事情
function trimString($input, $string){
$input = trim($input);
$startPattern = "/^($string)+/i";
$endPattern = "/($string)+$/i";
return trim(preg_replace($endPattern, '', preg_replace($startPattern,'',$input)));
}