Кодировка URL нарушает маршрутизацию в ExtJS - PullRequest
0 голосов
/ 15 января 2019

Если пользователь копирует URL с моего сайта, например:

www.mysite.com / # бирка / Sometagtext% 20 (Sometagtext2) | карта / somecardname / 21

и публикует его на другом веб-сайте, который на другом веб-сайте кодирует строку:

www.mysite.com / # Тег / SOMETEXT% 20% 28Sometext2% 29% 7Ccard / somecardname / 21

Когда используется этот новый URL, кодировка ExtJS не обрабатывается должным образом, и веб-сайт не работает.

Я проверил значение тега в onBeforeTagChange в пределах MainController.js (см. Код) и включает карту:

sometagtext% 20% 28Sometagtext2% 29% 7Ccard / somecardname / 21

sometagtext (Sometagtext2) | карточка / somecardname / 21)

Итак, по крайней мере, кодирование разделителя нескольких маршрутов из | % 7C портит сайт, так как не может разобрать теги с карточек.

Где и как мне обновить маршрутизатор, чтобы он декодировал URL-адрес перед его разбором?

Я использую ExtJS 6.0.2.437

Вот мой код:

Ext.define('APP.view.main.MainController', {
    extend: 'Ext.app.ViewController',

    alias: 'controller.main',

    routes: {
        'card/:card/:collection_id': {
            action: 'cardChange',
            before: 'beforeCardChange',
            conditions: {
                ':collection_id': '([0-9]+)'
            }
        },
        'card/:card': {
            action: 'cardChange',
            before: 'beforeCardChangeBase'

        },
        'tag/:tag': {
            action: 'onTagChange',
            before: 'onBeforeTagChange',
            conditions: {
                ':tag': '([%a-zA-Z0-9\.\\-\\_\\s,\(\)\/]+)'
            }
        }
    },
    onTagChange: function (tag) {

    },
    onBeforeTagChange: function (tag, action) {
        console.log(tag);
        tag = decodeURI(tag);
        console.log(tag);
    },
    /*  ...
        ...
        ...
    */
});

1 Ответ

0 голосов
/ 29 мая 2019

используйте decodeURI () перед обратным вызовом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...