3 / 2 / 1
Регистрация: 27.12.2010
Сообщений: 31

Обработка адресов. Убрать все после "?"

23.09.2014, 17:34. Показов 3324. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая. Есть адрес вида: /news/novye-chekhly-dlya-iphone-4?clear_cache=Y
Нужно привести к: /news/index.php?CODE=$1 , где $1 - это все после слеша и до ?, в данном случае novye-chekhly-dlya-iphone-4.
Я пишу
PHP
1
preg_replace('#^/news/(.*)(\\?.*)#', '/news/index.php?CODE=$1', '/news/novye-chekhly-dlya-iphone-4?clear_cache=Y', -1, $count);
Срабатывает как нужно, но только при условии что есть только один дополнительный параметр, а мне нужно убирать их все
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.09.2014, 17:34
Ответы с готовыми решениями:

Убрать все до и после
Czech Republic - Ravak - Rosa 95 Нужно удалить все, что до "-" и после "-", т.е. остаться должно "Ravak" Также возможен такой...

Убрать всё из строки после определённого символа
Добрый день. Есть определёная строка. К примеру: Это обыкновенная строка, которую я решил привести в качестве примера #хэштег Мне...

Как убрать конфликт адресов
На физической машине ip 188.133.226.76 Установил Virtual PC, задал ip 188.133.226.77 Почему пишет конфликт ip адресов, как убрать, у...

9
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
23.09.2014, 18:40
http://php.net/manual/ru/function.strpos.php
http://php.net/manual/ru/function.substr.php
регулярки здесь лишние
0
3 / 2 / 1
Регистрация: 27.12.2010
Сообщений: 31
23.09.2014, 18:43  [ТС]
Увы, без регулярок не обойтись. preg_replace автоматически вызывается в битриксе при обработке адресов. На данный момент это единственный способ "обрезать" лишние параметры в _REQUEST
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
23.09.2014, 19:52
Цитата Сообщение от FinKeRosiN Посмотреть сообщение
но только при условии что есть только один дополнительный параметр, а мне нужно убирать их все
Что вы понимаете под словосочетанием "дополнительный параметр"? Приведите пример ссылки, которую Ваше регулярное выражение обрабатывает неверно.
0
3 / 2 / 1
Регистрация: 27.12.2010
Сообщений: 31
23.09.2014, 20:41  [ТС]
"?clear_cache=Y" вот что я понимаю под доп. параметрами.
Вообщем я поковырялся, и переделал регулярку. Сейчас проблема такая:
PHP
1
^/news/((.*)(\?(.*)))|(.*)
нужно сделать чтобы
PHP
1
(\?(.*))
повторялась 1+ раз
если верить википедии, то нужно сделать так:
PHP
1
^/news/((.*)(\?(.*))+)|(.*)
т.е. + добавить после группы, но что-то не сильно работает

Добавлено через 38 минут
Я кажется понимаю в чем трабла, но еще не знаю как решить
Вот результат с плюсом и без плюса. Нужно как-то сделать, чтобы обрезались все "дополнительные параметры", а не последний.


Не могу понять почему, если написать (\?(.*))+,то обрезается только последнее вхождение в строку,начинающееся с "?", а если написать (\?(.*))(\?(.*)), то оба. Видимо я очень плохо понимаю работу квантификатора "+". Тут проблема в том, что я не могу знать сколько будет вхождений (\?(.*))
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
23.09.2014, 22:10
Цитата Сообщение от FinKeRosiN Посмотреть сообщение
Я кажется понимаю в чем трабла, но еще не знаю как решить
Вот результат с плюсом и без плюса. Нужно как-то сделать, чтобы обрезались все "дополнительные параметры", а не последний.
https://monosnap.com/image/T8a... QdqtPDMX5T
https://monosnap.com/image/egH... 8G6Hyk3Fq1
А откуда у Вас такие ссылки? Вы в курсе что при GET запросе вопросительный знак (?) предшествует только первой GET переменный, остальные переменные отделяются знаками амперсанда (&). Правильные ссылки выглядят вот так:

google.ru/search?q=амперсанд&oq=амперсанд&aqs=chrome...

Ссылку в которой более одного вопросительного знака Вы не увидите, да и это неверно.

И Ваше регулярное выражение для правильных ссылок с GET запросом вполне подходит.

Если все-таки дело идет не о HTTP протоколе, то достаточного такого выражения:
Code
1
'#^/news/([^\?]+\??)#'
1
3 / 2 / 1
Регистрация: 27.12.2010
Сообщений: 31
23.09.2014, 23:11  [ТС]
тогда задача усложняется, но в любом случае
Code
1
'#^/news/([^\?]+\??)#'
не сработал
http://take.ms/3ynDX

Добавлено через 11 минут
одна из причин почему я это делаю:

Кликните здесь для просмотра всего текста

Одна интересная особенность, которую надо учитывать.

Допустим вам надо сделать преобразование такого вида, чтобы при открытии страницы /news/445.php происходило преобразование в /news/detail.php?ID=445
Можно использовать такое правило
Код
Code
1
2
3
4
5
array(
    "CONDITION"   => "#^/news/([0-9]+)\\.php#",
    "RULE" => "ID=$1",
    "PATH" => "/news/detail.php",
)

Оно даже будет работать, но ровно до тех пор пока в строке не появятся дополнительные параметры. Например пользователь перешел с внешнего ресурса и в URL была добавлена метка для Google Analitics, запрошенный URL получился примерно такой /news/445.php?utm_source=google. Вместо текста новости вы увидите сообщение "Элемент не найден", потому что в результате преобразования получился такой адрес /news/detail.php?ID=445?utm_source=google.

Ниже приведен код, решающий эту проблему:
Code
1
2
3
4
5
array(
    "CONDITION"   => "#^/news/([0-9]+)\\.php(\\?(.*))?#",
    "RULE" => "ID=$1&$3",
    "PATH" => "/news/detail.php",
)

Этот комментарий был на странице в разделе "обработка адресов" в документации к битриксу. Я настраивал ЧПУ через обработку адресов и столкнулся с проблеммой что при сбросе кэша у меня в _REQUEST передается не правильный CODE, т.к. к нему прибавляется "?clear_cache=Y". Тогда я начал думать о том чтобы разделить нужную мне информацию и все что идет за ней. С задачей обработки адресов при сбросе кэша я справился, но что делать если добавится еще метка, как в случае описанном выше?
0
3 / 2 / 1
Регистрация: 27.12.2010
Сообщений: 31
23.09.2014, 23:20  [ТС]
Как оно работает сейчас
Миниатюры
Обработка адресов. Убрать все после "?"  
0
Невнимательный
 Аватар для ft4l
3119 / 1303 / 359
Регистрация: 08.02.2013
Сообщений: 7,629
Записей в блоге: 2
24.09.2014, 05:07
Непонятно чем не устраивало предлогаемое
"CONDITION" => "#^/news/([0-9]+)\\.php(\\?(.*))?#",
"RULE" => "ID=$1&$3",
"PATH" => "/news/detail.php"
если тем что требует обязательного наличия цифр и '.php'
, то замените на "#^/news/([^\\?]+)(\\?(.*))?#"

Как оно работает сейчас
там с такой-же заменой ID=$1&$3 выражениие получает или только $1 или только $3
, причём в обоих случаях как-бы до возможного ?-символа.
//.... Если правильно смог рассмотреть картинку
1
3 / 2 / 1
Регистрация: 27.12.2010
Сообщений: 31
24.09.2014, 09:20  [ТС]
Предлагаемый пример вообще мне не подходит
А "#^/news/([^\\?]+)(\\?(.*))?#" не работает, я уже писал об этом и скрин присылал

Добавлено через 8 минут
Лол без понятия что произошло, но вчера регулярка #^/news/([^\\?]+)(\\?(.*))?# не сработала.
Только что снова ее вставил, даже автозаполнение в хроме подсказало что я уже писал это правило и оно сработало. Особая магия битрикса.
Всем спасибо за помощь.
Постараюсь не забыть и сделать итоговое сообщение с подведением результатов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2014, 09:20
Помогаю со студенческими работами здесь

Как убрать из строки все, что находится после тире
Добрый день хотелось бы спросить т.к не разу такое не делал..времени больно нет хочется уже быстрей .. в ListViewe есть Items'ы так...

Как корректно убрать расширения из адресов страниц
Добрый день. Собираюсь убрать расширения из адресной строки страниц сайта через htaccess RewriteCond %{REQUEST_FILENAME} !-f ...

Обработка несуществующих адресов сайта
Здравствуйте! У меня есть сайт mysite.ru. Открываются страницы как mysite.ru/page/ так и mysite.ru/____page/ ( но она должна выдавать...

Обработка списка адресов из текстового файла
Добрый день. Надо написать небольшой скрипт для отправки прайсов. Есть текстовый файл такого содержания ...

MVC: организация и обработка адресов для новостей
Добрый вечер! Допустим, есть контроллер news. У него есть два метода, list и one. Первый выводит все данные из MySQL с постраничной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru