Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Кириллические символы в урле для location.search (https://javascript.ru/forum/misc/75372-kirillicheskie-simvoly-v-urle-dlya-location-search.html)

MC-XOBAHCK 30.09.2018 13:56

Кириллические символы в урле для 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 30.09.2018 15:15

Цитата:

Сообщение от MC-XOBAHCK
Получаю такой результат с абракадаброй

Это UTF, и вообще строки url кодируются, так что все в норме и все можно.

MC-XOBAHCK 30.09.2018 15:52

laimas, подскажите пожалуйста, что мне нужно сделать чтобы абракадабру перегнать опять в кириллицу?
Я урл распарсиваю и у меня значение для параметра с кириллицей получается абракадаброй.

Aetae 30.09.2018 15:57

decodeURIComponent(location.search)
а ещё если наплевать на ослика, можно юзать
new URLSearchParams(location.search)
что гораздо удобнее.

MC-XOBAHCK 30.09.2018 16:21

Aetae,
Спасибо! Теперь работает правильно.

MC-XOBAHCK 02.10.2018 15:39

Прошу опытных пользователей подсказать по такой ситуации. Я распарсиваю урл в массив объектов. Какие символы можно использовать в урле для разделения между элементами массива?
Например у меня урл:
site.ru/page?id=0&title=слово??id=1&title=текст??id=2&title=test

Я код полностью написал, но пока для разделения между элементами массива поставил по два знака вопроса ??
А есть ли какие рекомендации что использовать вместо моих ??, чтобы избежать возможных конфликтов?

laimas 02.10.2018 15:48

Странно, у вас кодировка страницы не совпадает с кодировкой URL?

Уберите вопросики вообще, передавайте парно, разбирая пары.

MC-XOBAHCK 02.10.2018 16:13

Цитата:

Сообщение от laimas (Сообщение 495684)
Странно, у вас кодировка страницы не совпадает с кодировкой URL?

Уберите вопросики вообще, передавайте парно, разбирая пары.

Я пока локально на компе пишу в файле js подключённому в html (всё utf-8).
А что значит "передавайте парно, разбирая пары"? Можете показать как должен быть такой урл:
site.ru/page?id=0&title=слово??id=1&title=текст??id=2&title=test

У меня title - это пользователи текстовую метку добавляют. Могут и вопросов туда натыкать, вот я и опасаюсь что некорректно может получиться.

laimas 02.10.2018 16:21

Если все в UTF, то какие проблемы с кириллицей?

Параметры (ключ-значение) в URL разделяются &, выдумывать что-то можно в том случае, если сложный составной параметр. Вопрос символ занятый тем более.

key=var&key=var&key=var&key=var

Разбить по & и получим все параметры, дальше разбиение по = .....

MC-XOBAHCK 02.10.2018 16:41

Цитата:

Сообщение от laimas (Сообщение 495687)
Если все в UTF, то какие проблемы с кириллицей?

Я не знаю почему так, это в браузере гугл-хром (обновлён до последней версии) на винде.

Цитата:

Сообщение от laimas (Сообщение 495687)
Параметры (ключ-значение) в 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);


Часовой пояс GMT +3, время: 10:12.