кодирование подчеркивания круглых скобок наклонной звездой с помощью encodeURIComponent

#javascript #encodeuricomponent

#javascript #encodeuricomponent

Вопрос:

encodeURIComponent экранирует все символы, кроме следующих: - _ . ! ~ * ' ( )

Но возможно ли расширить функциональность, также кодируя вышеуказанные специальные символы.

Я знаю, что могу сделать что-то вроде этого:

 encodeURIComponent(str).replace(/(/g, "(").replace(/)/g, ")");
 

но я хочу такую функциональность, без использования дополнительных функций в encodeURIComponent

 encodeURIComponent(str);
 

Ответ №1:

  1. Вы должны создать свою собственную функцию.
  2. На самом деле вы должны создать свою собственную функцию.
  3. Если вы действительно знаете, что делаете, перейдите к шагу 1.

Не говорите, что я вас не предупреждал; здесь есть драконы:

 (function() {
    var _fn = encodeURIComponent;

    window.encodeURIComponent = function(str) {
        return _fn(str).replace(/(/g, "(").replace(/)/g, ")");
    };
}());
 

Комментарии:

1. Для ясности: изменение встроенных элементов — очень, очень плохая идея, вызывает тонкие и трудные для отслеживания ошибки и т. Д.

2. @FakeRainBrigand Совершенно верно, обновлено, чтобы отразить это мнение.

3. конечно, мы не должны, но на самом деле у меня очень большой код, и я не хочу удалять старые функции.

4. @STEEL У правильного редактора должна быть более чем достойная функция поиска и замены 🙂

5. Должен любить личные планы 😉

Ответ №2:

вы можете написать свою пользовательскую функцию кодирования

 customEncodeURI(str : string){
var iChars = ':",_{}/\'; // provide all the set of chars that you want
var encodedStr = ''
 for (var i = 0; i < str.length; i  ) {
    if (iChars.indexOf(str.charAt(i)) != -1) {
        var hex = (str.charCodeAt(i)).toString(16);
        encodedStr  = '%'   hex;
    }else {
        encodedStr  = str[i];
    }
  }
  console.log("Final encoded string is " encodedStr);
  console.log("Final decoded string is " decodeURIComponent(encodedStr));
  return encodedStr;
}