Aleksandr
А если и нет, то все равно гарантированного способа разбить на 4 элемента без дополнительных знаний о значениях невозможно
🆃🅰🆁🅸🅺 🇺🇦
как отправляешь?
Aleksandr
Потому что & используется разделителем, а & в значении никак от разделителя не отличается
🆃🅰🆁🅸🅺 🇺🇦
Ему нужен urlencode и все
🆃🅰🆁🅸🅺 🇺🇦
Причем если это простая форма то там автоматом. Если ajax, то нужно закодировать
Aleksandr
Не, есть вариант распарить стандартными методами, потом пройтись по ключам и склеить те, у которых значение пустое. Но это все рухнет сразу, как появится, например, символ = в значении или что-то подобное
🆃🅰🆁🅸🅺 🇺🇦
И это не бага parse_url
Grigoriy
друг ну я тебе написал код, через регулярки всё достаётся! preg_match распихает в массив все значение! в последнее значение оно запихает все что осталось, независимо от того что там ещё амперсанды! Единственное посмотри, если оно жадно будет доставать поставь "?" в первых трёх значениях регулярки, чтобы сделать не жадным его
Aleksandr
Зачем костыли делать?
Ну если человеку очень прямо хочется что-то сделать, не решая настоящей проблемы)
🆃🅰🆁🅸🅺 🇺🇦
Есть стандарт. Ог не придерживается
Grigoriy
ну а как ты хочешь достать это значение = 'comment=this&is&comment' ?
🆃🅰🆁🅸🅺 🇺🇦
Пусть клиент отправляет значения енкодом не нарушая стандарт
Grigoriy
если разделять по амперсанду например explode(), то потом всё равно последние значение нужно отдельно соеденять! регуляркой ты можешь разбить строку на 4 части!
🆃🅰🆁🅸🅺 🇺🇦
Мля куда тебя клонит
🆃🅰🆁🅸🅺 🇺🇦
не в ту сторону
🆃🅰🆁🅸🅺 🇺🇦
& разделитель точка
🆃🅰🆁🅸🅺 🇺🇦
comment=this%26is%26comment
Grigoriy
ну так клиент всегда может ошибиться плюс их может быть несколько, плюс админы, которые могут отправлять строку, так же могут поменяться
🆃🅰🆁🅸🅺 🇺🇦
Вот так жолжен отправить клиент
Grigoriy
ну вы думаете о себе информацию все по стандарту заполняют?
Владислав
Не надо регуляркой доставать параметры. Для этого есть HTTP
🆃🅰🆁🅸🅺 🇺🇦
Grigoriy
ну я предложил решение, это как бы вообще не сложно реализовать
🆃🅰🆁🅸🅺 🇺🇦
Если отправлять ajax-ом, то есть encodeURIComponent
Aleksandr
А если исходить из того, что клиент не обязан общаться с нами в соответствии с протоколом, то как вообще что-то можно обрабатывать?
Aleksandr
ну я предложил решение, это как бы вообще не сложно реализовать
Это не решение, как и мое предложение выше))
Владислав
Я тоже так хотел делать, чтобы не передавать параметр в роуте (вернее, не понимал, что надо передавать в роуте). Потом понял, что ничего хорошего не будет.
Grigoriy
я не знаю как человек получает строку ребята! он написал что не может разбить её! регуляркой можно разбить! я не прав? или что вы хотите мне доказать?)
Дмитрий
Пусть кодирует её целиком
Aleksandr
Просто задача ведь не в том, чтобы заданный литерал распарсить - мы тогда это в уме сделаем и результат сразу запишем в коде
Aleksandr
Задача сделать парсинг для всех возможных значений параметров. И вот тут регулярки и склейки пустых элементов не работают от слова совсем. Значит, это не решение.
🆃🅰🆁🅸🅺 🇺🇦
я не знаю как человек получает строку ребята! он написал что не может разбить её! регуляркой можно разбить! я не прав? или что вы хотите мне доказать?)
Хотим чтобы вместо решпть абы как он решпл реальную проблему с тем, почему ему не прилетают верные данные. А эти не валидны
Grigoriy
Так просто такие решения в конечном счёте не работают, а обходятся очень дорого
ну ему данные могут прилитать при парсенге, я не знаю источник данных, вы уверенны, как он их получает? регулярками абсолютно всё всегда работает! не знаю почему у вас что-то не получается)
Дмитрий
Спокойно)
Дмитрий
Регулярки должны использоваться не в качестве костылей
Aleksandr
Aleksandr
И посмотри, что даст регулярки
Aleksandr
если курлом запрашивают: значит невалидный запрос и 400 Bad request
Ну про невалидность тоже иногда перегиб. Приведённый пример строки вполне валилен вроде.
Владислав
И посмотри, что даст регулярки
Всё зависит от того, как написать.
Aleksandr
Всё зависит от того, как написать.
Ой, ну мы же конкретный случай рассматриваем, так?
Petr
Можно бессмысленно обмазываться говнокодом, а можно попытаться решить источник проблемы — сказать, например, клиенту, что он шлет данные в невалидном формате, отправив 400 Bad Request.
Владислав
Ой, ну мы же конкретный случай рассматриваем, так?
Дай мне конкретный случай. Ну или 20 конкретный случаев. Я разберу тебе их на массивы.
Владислав
И да, всего одной регуляркой
Grigoriy
Ой, ну мы же конкретный случай рассматриваем, так?
может я не понимаю, что вы имеете ввиду! ну задача была разбить данную строку на 4 значения! без объяснениея как она получается или что-то ещё! вот у меня работает
Владислав
Это костыль
Aleksandr
И да, всего одной регуляркой
Ну давай: name=alex&city=moscow&phone=123456&comment=this&is&comment Поля name, city, phone, comment могут содержать помимо прочего любое количество символов =, &, ни коим образом не отличимых от &-разделителя и =-разделителя. Порядок параметров не гарантирован. Все значения произвольные.
Aleksandr
может я не понимаю, что вы имеете ввиду! ну задача была разбить данную строку на 4 значения! без объяснениея как она получается или что-то ещё! вот у меня работает
Прочитай выше о задаче. Данную конкретную строку делить скриптом не надо - мы Ее в уме поделим и запишем в коде результат. В таком виде задача смысла не имеет. Смысл есть, когда надо множество подобных строк обрабатывать с учётом произвольности значений параметров
🆃🅰🆁🅸🅺 🇺🇦
может я не понимаю, что вы имеете ввиду! ну задача была разбить данную строку на 4 значения! без объяснениея как она получается или что-то ещё! вот у меня работает
смотри задача заставить автомобиль двигаться. Можно самому толкать, а можно установить двигатель. Твое решение костыль ибо прилетают заведомо неверные данные. Это проблема на стороне клиента, который не закодировал строку в соответствии со стандартом. Потомоу решать стоит не на сервере
Grigoriy
Ну давай: name=alex&city=moscow&phone=123456&comment=this&is&comment Поля name, city, phone, comment могут содержать помимо прочего любое количество символов =, &, ни коим образом не отличимых от &-разделителя и =-разделителя. Порядок параметров не гарантирован. Все значения произвольные.
ну тут же опять, чёткие данные есть! вероятней всего имя, название города, номер будут построенны без амперсанда! я не говорю, что вы не правы, что не нужно отправлять правильные данные! естественно это лучше всего, никто не спорит) с ними куда проще работать! но в контексте поставленной задачи я написал человеку решение! я не могу понять, что вы хотите мне сказать? что это костыль, я знаю! но опять же я не знаю от куда приходят данные!
Aleksandr
Мысль в том, что решения, работающего не только на данной константе, просто нет.
Grigoriy
Это пользовательские данные, поэтому мы не можем гарантировать отсутствие каких-либо символов в параметрах :-)
вы абсолютно правы! тут и спорить нечего! если есть возможность контролировать отправленнее даныых, то нужно правильно струтурировать их
Grigoriy
Позвольте поинтересоваться: а что, если нет возможности их контролировать?
ну вы можете прочитать сообщения выше и понять о чём разговор! там думаю и найдёте мой ответ на Ваш вопрос!)
Petr
ну вы можете прочитать сообщения выше и понять о чём разговор! там думаю и найдёте мой ответ на Ваш вопрос!)
Я следил за всем диалогом и кроме предложения написать костыль на регулярках ничего не увидел.
Aleksandr
Позвольте поинтересоваться: а что, если нет возможности их контролировать?
Считать параметр comment пустым, считать что есть параметры this и is с пустыми значениями. И мы либо игнорируем лишние параметры, или отдаём ошибку, потому что мы не ожидаем дополнительных параметров или потому что comment не должен быть пустым, например
Grigoriy
Я следил за всем диалогом и кроме предложения написать костыль на регулярках ничего не увидел.
я и не собирался отвечать если честно!) но просто, как я понял "comment" переносит, как раз значение "this&is&comment" и разнообразные другие, как коментарий какого-то пользователя, и если он отвечал таким образом на какой-то вопрос, то почему его нужно принять, как пустое значение?
Aleksandr
я и не собирался отвечать если честно!) но просто, как я понял "comment" переносит, как раз значение "this&is&comment" и разнообразные другие, как коментарий какого-то пользователя, и если он отвечал таким образом на какой-то вопрос, то почему его нужно принять, как пустое значение?
Потому что & является разделителем параметров. Потому что ты не можешь быть уверен, что is - это часть комментария, а не дополнительный параметр. И ты не можешь быть уверен, что вся строка comment=this&is&comment не является частью значения предыдущего параметра
Владислав
Grigoriy
comment="this&is&comment" я так понимаю это значение типа "ЭТО ЕСТЬ КОММЕНТАРИЙ" Это то, что как раз хотел передать автор! Но скорей всего вы правы!
Владислав
Похер на порядок, да
The Ant
он художник, он так видит. Чо доебался то?
The Ant
какого хуя вы query string парсите регулярками наркоманы? Вот в чем вопрос. есть же http://php.net/manual/ru/function.parse-str.php
Пантелеев
Парни, ка кперевести Piping Between Files