#javascript #encodeuricomponent
#javascript #encodeuricomponent
Вопрос:
encodeURIComponent экранирует все символы, кроме следующих: - _ . ! ~ * ' ( )
Но возможно ли расширить функциональность, также кодируя вышеуказанные специальные символы.
Я знаю, что могу сделать что-то вроде этого:
encodeURIComponent(str).replace(/(/g, "(").replace(/)/g, ")");
но я хочу такую функциональность, без использования дополнительных функций в encodeURIComponent
encodeURIComponent(str);
Ответ №1:
- Вы должны создать свою собственную функцию.
- На самом деле вы должны создать свою собственную функцию.
- Если вы действительно знаете, что делаете, перейдите к шагу 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;
}