PHP trim() проблема
Допустим, у меня есть $url="../folder/file"
и я хочу найти и удалить ../
часть.
я использую trim()
...
$url = trim($url,"../");
... но это дает мне предупреждение:
Предупреждение: trim() [function.trim]: недопустимый диапазон "..", ни один символ слева от ".." в строке выше
Что я сделал не так?
5 ответов
То, что вы сделали неправильно, не читало руководство:
С помощью.. вы можете указать диапазон символов.
<?php
$url="../folder/file";
$url = trim($url,"\.\./");
echo $url;
?>
Вы можете использовать Литрим
echo ltrim("../folder/file", "./");
или же
echo trim("../folder/file", "./");
В функции обрезки http://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);
Второй аргумент для обрезки должен быть строкой символов, которые будут удалены, поэтому вам не нужно ставить '.' дважды.
Я нашел эту функцию в нижних комментариях страницы обрезки на php.net, которые, кажется, делают то, что вы хотите
function trimString($input, $string){
$input = trim($input);
$startPattern = "/^($string)+/i";
$endPattern = "/($string)+$/i";
return trim(preg_replace($endPattern, '', preg_replace($startPattern,'',$input)));
}
Второй аргумент функции обрезки указывает список символов для удаления, а не многосимвольную строку. Функция интерпретирует '..' как оператор, задающий диапазон символов (например, a..z или 1..5). Вы можете удалить '../' несколькими способами, но один из простых:
$parts = explode('/', $url);
array_shift($parts);
$url = implode('/', $parts);