Слэш экранируется в URL - PullRequest
       11

Слэш экранируется в URL

2 голосов
/ 26 августа 2011

Я использую плагин jquery.history в своем веб-приложении и у меня проблема с экранированием '/', поэтому, например, мне нужно создать следующий URL

/ SomeAction # Resource/ ResOne

, но получил

/ SomeAction # Resource% F2ResOne

для загрузки URL-адреса, который я использую

$.history.load (btn.attr ('action-name'));

, где btn элемент имеет атрибут action-name 'Resource / ResOne' (этоимеет символ '/' в исходном коде)

Итак, вопрос в том, как добиться, чтобы символ '/' оставался в URL?(этот подход используется в gmail, когда вы открываете какую-то почту из папки «Входящие», поэтому, пожалуйста, не отвечайте с техниками, которые используют методы декодирования на стороне сервера)

Спасибо

1 Ответ

2 голосов
/ 26 августа 2011

decodeURIComponent сам по себе, вероятно, не поможет.Посмотрите на плагин, и, в частности, давайте посмотрим на 'locationWrapper'.Это одна из вещей, которая, вероятно, вызывается, когда вы добавляете 'load' url.

var locationWrapper = {
    put: function(hash, win) {
        (win || window).location.hash = this.encoder(hash);
    },
    get: function(win) {
        var hash = ((win || window).location.hash).replace(/^#/, '');
        try {
            return $.browser.mozilla ? hash : decodeURIComponent(hash);
        }
        catch (error) {
            return hash;
        }
    },
    encoder: encodeURIComponent
};

Заметили часть кодера?Вам нужно как-то это переопределить или заменить кодировщик ... с первого взгляда на код, он выглядит не слишком «дружественным».Так что, согласно этому коду, не имеет значения, если вы «расшифровываете» имя действия миллион раз, оно все равно собирается его снова кодировать.

Редактировать: только что нашел это в вики:

$.history.init(callback, { unescape: true });

Это опция конфигурации.https://github.com/tkyk/jquery-history-plugin/wiki/How-to-use-the-forward-slash-instead-of-ugly-%27%252F%27

В любом случае, удачи!

...