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);
Другие вопросы по тегам