Кириллические символы в урле для location.search
Допускается ли использование кириллицы в url для передачи параметров для метода location.search?
Например урл: site.ru/page?id=0&title=слово Получаю такой результат с абракадаброй: const param = location.search.slice(1).split('&'); console.log(param); // ["id=0", "title=%D1%81%D0%BB%D0%BE%D0%B2%D0%BE"] Можно как то получить это значение корректно или кириллицу нельзя использовать в таких случаях? |
Цитата:
|
laimas, подскажите пожалуйста, что мне нужно сделать чтобы абракадабру перегнать опять в кириллицу?
Я урл распарсиваю и у меня значение для параметра с кириллицей получается абракадаброй. |
decodeURIComponent(location.search)а ещё если наплевать на ослика, можно юзать new URLSearchParams(location.search)что гораздо удобнее. |
Aetae,
Спасибо! Теперь работает правильно. |
Прошу опытных пользователей подсказать по такой ситуации. Я распарсиваю урл в массив объектов. Какие символы можно использовать в урле для разделения между элементами массива?
Например у меня урл: site.ru/page?id=0&title=слово??id=1&title=текст??id=2&title=test Я код полностью написал, но пока для разделения между элементами массива поставил по два знака вопроса ?? А есть ли какие рекомендации что использовать вместо моих ??, чтобы избежать возможных конфликтов? |
Странно, у вас кодировка страницы не совпадает с кодировкой URL?
Уберите вопросики вообще, передавайте парно, разбирая пары. |
Цитата:
А что значит "передавайте парно, разбирая пары"? Можете показать как должен быть такой урл: site.ru/page?id=0&title=слово??id=1&title=текст??id=2&title=test У меня title - это пользователи текстовую метку добавляют. Могут и вопросов туда натыкать, вот я и опасаюсь что некорректно может получиться. |
Если все в UTF, то какие проблемы с кириллицей?
Параметры (ключ-значение) в URL разделяются &, выдумывать что-то можно в том случае, если сложный составной параметр. Вопрос символ занятый тем более. key=var&key=var&key=var&key=var Разбить по & и получим все параметры, дальше разбиение по = ..... |
Цитата:
Цитата:
Просто мне нужно из урла получить массив объектов [{...}, {...}] Я вот так делаю: const parts = location.search.slice(1).split('??'); let params = []; for (let i = 0; i < parts.length; i++) { params[i] = parts[i].split('&').reduce((prev, current) => { const [name, value] = current.split('='); prev[name] = value; return prev; }, {}); } console.log(parts); console.log(params); |
Да, странно работает JS с utf, а вот с запросами ...
Вам чего надо чтобы в каждый объект массива попадала пара - id->значение и title->значение? Ну так после получения параметров, берете по две пары и помещаете в объект. Они же у вас повторяются, зачем лишние разделители? |
Цитата:
Так как мне чтобы хоть малость приблизится к вашему уровню нужно ещё как минимум лет 10 гавнокодить, то я не понимаю ваших намёков. Вы уж извините меня. Я так прикинул глядя на клавиатуру, возьму ка я лучше вместо двух вопросов для разделения между объектами в массиве, две палочки ||, а в текстовом инпуте, где пользователь имеет влияние на генерируемый урл, сделаю фильтр на запрет символов: &, || и = , чтобы вдруг чаво не сломать. Теперь у меня новая проблема - фильтр на упомянутые выше символы. Никогда не писал, пользовался фильтром который мне здесь ещё год назад помогли написать. Но, помню что не раз натыкался на документацию по написанию фильтров, так что буду искать и пробовать. |
const urlParameters = { title: 'гимми да бест', other: ['один', 'два', 'три'] } const encodedUrl = (`http://localhost:2999/page?data=${encodeURIComponent(JSON.stringify(urlParameters))}`) console.log(encodedUrl) const decodedUrl = decodeURIComponent(encodedUrl) const data = decodedUrl.split('?data=')[1] && JSON.parse(decodedUrl.split('?data=')[1]) data && console.log(data.title, data.other[0]) Другой варик |
Используйте POST, а не GET.
Используйте JSON.stringify и JSON.parse, а не изобретайте велосипед. |
Цитата:
Если эти GET параметры есть поля формы, то последовательность их будет такой, в какой поля объявлены в форме. Другими словами вы можете структурой формы следовать ожиданиям сервера. А к примеру для РНР именованием полей можно задавать итоговый массив любой вложенности при этом поля в форме могут располагаться произвольно. И это никак не достигается дополнительными никчемными разделителями в GET параметрах, исключительно только использованием ключей (имен полей формы). У вас запрос key=var&key=var&key=var&key=var и судя по тому месту где вы вставляете свой разделитель вы хотите получить по две пары key=var&key=var. Вам показали как (или вы сами). Если в цикле этого кода проверять на четность его итерацию (деление по модулю, а можно и проще, проверяя младший бит, у нечетных он равен 1), то это будет говорить о том, что нужно объявить в массиве объект, который будет текущим и в который помещаются разбираемые в цикле параметры (key=var). Если бы речь была о сервере и РНР, то ему достаточно array_chunk($_GET, 2). А вот если передается значение некоторого ключа, из которого методом расколачивания нужно получить массив, тут уже иное дело. Или же "размерность следования" ваших параметров запроса не постоянная, можно еще что-то придумать, но вот для чего такой костыль может потребоваться я ума не приложу. ) |
Цитата:
Более приблежённый к моему вариант: http://sait.com/page?form=treagle&size=10.5,4.24&color=red&tag=меточка||form=rechtagle&size=10,4&color=green&tag=другая_метка||form=treagle&size=7,9,12&color=orange&tag=ещё_меточка Получив такие данные я могу сгенерировать скриптом три блока - 2 треугольника и 1 прямоугольник, нарисовать фигуры по заданными размерам, задать цвет и заголовки, произвести какие либо расчёты. Данных и элементов можно больше напихать, у меня в скрипте что я пишу получилось 5 ключей для каждого элемента массива. Само собой названия ключей оптимизируются до 1-го символа, чтобы максимально укоротить длину урла. Вы работаете над сложными задачами, а у меня уровень не тот, поэтому всё куда примитивнее чем вы подумали. |
Цитата:
Пользователь набивает в адресную строку при вызове страницы?? |
Цитата:
Что то типа как в Codepen - я написал код и дал вам ссылку чтобы вы оценили какой я гавнокодер. Только тут данные не хранятся на сервере, а берутся из урла. |
Или другой пример.
Для себя пользователь может сохранить данные в localStorage (у меня localStorage реализован в конструкторе), а вот чтобы показать кому то результат, чтобы другой человек мог увидеть что у него получилось - вот для этого данные засовываются в урл. |
Сравните прежнее с этим. А вообще вам уже сказали - есть json.
|
https://github.com/dreikanter/paradi...-max-length.md
В особо-тяжелых случаях можно сжимать данные gzip-ом с последующим кодированием в BASE64, но лучше, конечно, по возможности избегать таких вещей. |
MC-XOBAHCK,
Поскольку этот УРЛ - чисто ваше творение и не будет обрабатываться никаким сервером, то можете написать в нем все, что угодно - как вам удобнее. Например, var url = 'http://sait.com/page?[{"form":"treangle","size":[10.5,4.24],"color":"red","tag":"меточка"},{"form":"rechtangle","size":[10,4],"color":"green","tag":"другая_метка"}]'; var params = JSON.parse(url.split('?')[1]); alert(params[1].tag); alert(params[0].size[1]); Для УРЛ со страницы использовать во второй строке var params = JSON.parse(decodeURI(location.search.split('?')[1])); |
Цитата:
Цитата:
Если можно, я задам тут такой вопрос. Посмотрите пожалуйста, я написал фильтр для input type="text" который запрещает ввод таких значений: '||', '&', '=' inputTag.addEventListener('keyup', function() { this.value = this.value.replace('||', '').replace('&', '').replace('=', ''); }); Это нормально или можно как то проще сделать? Я штудирую раздел https://learn.javascript.ru/regular-...ons-javascript , но тут нужно время чтобы разобраться. |
Цитата:
Но когда это будет, так что без сервера не обойтись. А в статье товарищ сильно заблуждается, утверждая, что метод POST скушает все, это не так, ограничения накладываются ПО которое на хосте. Это ограничение определяет максимальное количество переменных в запросе, и связано это с безопасностью. |
Цитата:
Вам не кажется что это всего лишь пиар компания нового сервиса? Удачный лозунг для маркетинга - "создатель ынтырнета уничтожит ынтырнет". Громко и к завтрашнему утру забъют этим все таблоиды. Толпа побЯгит на такое проверять что к чему. Я может неправильно понял, но мне понравились пункты - наш сервис исключительно на Node.js, ссылки на тарифы с всякими голд пакетами, и пункты в регистрации - ваше мыло (глядишь скоро появится телефон, а потом ожидаемс запроса паспортных данных : ) Как говАривал Герадот: "В ентырнете главное обвёртка, а не содержание". Все данные сразу в ЦРУ или в какое то там веб-закулисье (не путать с теневым правительством). |
Цитата:
|
Мне один уважаемый человек недавно так написал:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 06:47. |