Похоже, что это легко решить, но это не так просто, как кажется. У меня есть эта строка в PHP:
////%postname%/
Это URL-адрес, и я никогда не хочу больше одной косой черты подряд. Я никогда не хочу полностью удалить косые черты.
Вот как это должно выглядеть:
/%postname%/
Я думаю, потому что структура может выглядеть по-другому. Мне нужно умное preg заменить regexp. Ему необходимо работать с такими URL-адресами:
////%postname%//mytest/test///testing
который должен быть преобразован в это:
/%postname%/mytest/test/testing
Ну вот:
$str = preg_replace('~/+~', '/', $str);
Или:
$str = preg_replace('~//+~', '/', $str);
Или даже:
$str = preg_replace('~/{2,}~', '/', $str);
Простая str_replace()
также выполнит трюк (если не более двух последовательных слэшей):
$str = str_replace('//', '/', $str);
Пытаться:
echo preg_replace('#/{2,}#', '/', '////%postname%//mytest/test///testing');
function drop_multiple_slashes($str) { if(strpos($str,'//')!==false) { return drop_multiple_slashes(str_replace('//','/',$str)); } return $str; }
это использование str_replace
Поздно, но все эти методы также удалят http://
слэши, но это.
function to_single_slashes($input) { return preg_replace('~(^|[^:])//+~', '\\1/', $input); } # out: http://localhost/lorem-ipsum/123/456/ print to_single_slashes('http:///////localhost////lorem-ipsum/123/////456/');
echo str_replace('//', '/', $str);
Мое решение:
while (strlen($uri) > 1 && $uri[0] === '/' && $uri[1] === '/') { $uri = substr($uri, 1); }