Перейти к содержимому



Обрезка урлов (URL)

#1

Поделиться сообщением #1



T(h)rasher

T(h)rasher
  • Неактивные
  • 22 сообщений
  • Репутация: 1
0

Отправлено 16 Май 2014 - 19:24

Всем добрый вечер. Мне нужно вырезать из урла среднюю часть, т.е. есть, например, такой урл: www.mysite.ru/hardware/Intel/processors/new/u56723.jpg. А в итоге нужно получить следующий урл: www.mysite.ru/u56723.jpg, т.е. нужно вырезать все подкаталоги из средней части урла до самого файла. Подозреваю, что это делается с помощью регулярных выражений, но я пока с ними толком не знаком. Подскажите как можно решить задачу. Заранее спасибо за помощь.


 

 

Сообщение отредактировал T(h)rasher: 16 Май 2014 - 19:25

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Сменил урлы, теперь беда и с индексацией
  2. В каких случаях есть смысл менять урлы на ЧПУ?
  3. Проблема с тегом site_url в MODX Revo
  4. Страшна ли смена структуры URL
  5. Почему WP обрезает URL ?

#2

Поделиться сообщением #2



Ixman

Ixman
  • Пользователь PRO
  • 2 582 сообщений
  • Репутация: 616

Отправлено 16 Май 2014 - 20:54

T(h)rasher, я думаю функция preg-replace вам в помощь


Сообщение отредактировал Ixman: 16 Май 2014 - 20:55

  • 0


#3

Поделиться сообщением #3



T(h)rasher

T(h)rasher
    Topic Starter
  • Неактивные
  • 22 сообщений
  • Репутация: 1

Отправлено 16 Май 2014 - 21:05

Спасибо за ссылку. Да, судя по всему, надо воспользоваться этой функцией, но я не знаю как само регулярное выражение записать - для удаления всех подкаталогов.


  • 0

#4

Поделиться сообщением #4



Ixman

Ixman
  • Пользователь PRO
  • 2 582 сообщений
  • Репутация: 616

Отправлено 16 Май 2014 - 22:32

Вечером голова уже не варит, чёт не могу сообразить как их вырезать.

Сообщение отредактировал Ixman: 16 Май 2014 - 22:32

  • 0


#5

Поделиться сообщением #5



matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 17 Май 2014 - 20:44

Добрый вечер.

Например так возможно:

$str = "www.mysite.ru/hardware/Intel/processors/new/u56723.jpg";
$domen = "www.mysite.ru/";
$pattern = "#.*/(.+)$#";

echo preg_replace($pattern, $domen."$1", $str); // результат: www.mysite.ru/u56723.jpg

  • 0


#6

Поделиться сообщением #6



sakhseo

sakhseo
  • Неактивные
  • 13 сообщений
  • Репутация: 1

Отправлено 17 Май 2014 - 22:16

$str = "www.mysite.ru/hardware/Intel/processors/new/u56723.jpg";
echo preg_replace("#^([^/]+)/.*/([^/]+)$#", "$1/$2", $str);

Или вот так. По ситуации надо)))

$str = "бла бла бла dfhhfdhd www.mysite.ru/hardware/Intel/processors/new/u56723.jpg бла бла бла";
echo preg_replace("#([^/\s]+)/.*/([^/\s]+)#", "$1/$2", $str); // бла бла бла dfhhfdhd www.mysite.ru/u56723.jpg бла бла бла

Сообщение отредактировал sakhseo: 17 Май 2014 - 22:39

  • 1

#7

Поделиться сообщением #7



T(h)rasher

T(h)rasher
    Topic Starter
  • Неактивные
  • 22 сообщений
  • Репутация: 1

Отправлено 17 Май 2014 - 22:22

Спасибо большое за помощь, надо будет разобраться что есть что в шаблоне. Буду тестить)
Кстати, кто-нибудь знает какой-нибудь ресурс (курс, книгу или просто сайт), где было бы в доступной форме объяснено как работать с регулярными выражениями, составлять их и т.д.? Буду благодарен за ссылки. Спасибо. 


Сообщение отредактировал T(h)rasher: 17 Май 2014 - 22:37

  • 0

#8

Поделиться сообщением #8



matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 18 Май 2014 - 07:26

Начать можно с первой книги (она попроще), после приступить ко второй книге, этого будет достаточно:

1. Бен Форта. Регулярные выражения. 10 минут на урок.

2. Дж. Фридл. Регулярные выражения.

Обе книги можно без проблем найти и скачать.


  • 2


#9

Поделиться сообщением #9



T(h)rasher

T(h)rasher
    Topic Starter
  • Неактивные
  • 22 сообщений
  • Репутация: 1

Отправлено 19 Май 2014 - 21:04

Со строкой для паттерна в примере, приведенном matroskin8, разобрался. Не пойму, что означает в этом же примере "$1" (в примере sakhseo это "$1/$2"), и зачем делать слияние строки $domen и "$1". Подскажите пожалуйста


  • 0

#10

Поделиться сообщением #10



matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 20 Май 2014 - 09:46


Не пойму, что означает в этом же примере "$1" (в примере sakhseo это "$1/$2")

В регулярных выражениях часть шаблона, заключенная в скобки (их называют "группирующими", "запоминающими" в зависимости от цели), запоминается, иногда говорят - "кладется в карман". Вот эти вот "карманы" нумеруются, это как пронумерованные переменные. В моем примере использованы круглые скобки 1 раз, соответственно, мы положили часть строки (все, что идет до первого слеша от конца строки) в карман №1.

В примере sakhseo запоминающие скобки использованы дважды: в карман №1 попадет доменное имя, а в карман №2 - все, что идет после последнего слеша до слеша или пробела.

Далее во втором параметре функции preg_replace() мы можем обратиться к содержимому карманов и что-то сделать с ним или же просто вывести. Только в данном случае вместо знака № используется знак $.

В моем примере строка домена склеивается с содержимым переменной 1 (кармана №1), в примере sakhseo склеивается содержимое переменных $1 и $2.


  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru