Как исправить путь с помощью регулярного выражения в php для PATHS и не нарушать URL-адреса? - PullRequest
3 голосов
/ 11 июля 2011

Я хочу заменить //, но не ://.Я использую эту функцию для исправления неработающих URL:

function fix ($path)
{
    return preg_replace( "/\/+/", "/", $path );
}

Например:

Ввод:

a//a//s/b/d//df//a/s/

Вывод (свернутые блоки из нескольких слэшей):

a/a/s/b/d/df/a/s/

Это нормально, но если я передаю URL, я ломаю часть http:// и в итоге получаю http:/.Например:

http://www.domain.com/a/a/s/b/d/df/a/s/

Я получаю:

http:/www.domain.com/a/a/s/b/d/df/a/s/

Я хочу сохранить http:// без изменений:

http://www.domain.com/a/a/s/b/d/df/a/s/

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Вы можете решить это довольно легко, используя негативный взгляд назад :

function fix ($path)
{
    return preg_replace("#(?<!:)/{2,}#", "/", $path);
}

Обратите внимание, что я также изменил ваш разделитель с / на #, поэтому вам не нужно избегать косой черты.
Рабочий пример: http://ideone.com/6zGBg

Это может соответствовать второму слешу, если у вас их больше двух (file://// -> file://). Если это проблема, вы можете использовать #(?<![:/])/{2,}#.
Пример: http://ideone.com/T2mlR

0 голосов
/ 11 июля 2011
return preg_replace("/[^:]\/+/", "/", $path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...