Вы можете использовать регулярное выражение:
var url = 'http://example.com';
var escaped = url.replace(/[^A-Za-z0-9]/g, function(match) {
var hex = match.charCodeAt(0).toString(16);
return '%' + (hex.length < 2 ? '0' + hex : hex);
});
console.log(escaped); // => "http%3a%2f%2fexample%2ecom"
[^A-Za-z0-9]
означает «что-либо, что НЕ является буквой или цифрой» (^
означает, что при размещении в начале класса символов).
При передаче функции на replace
она будет вызывать эту функцию (с совпадением как аргумент) вместо замены статической строкой.
charCodeAt
получит код символа указанного символа (по аргументу), поэтому charCodeAt(0)
получает код символа первого символа.
toString
принимает опционный базовый аргумент, определяющий, какую базу вы хотите, а база 16 - шестнадцатеричная.
И, наконец, (hex.length < 2 ? '0' + hex : hex)
добавит начальный ноль в том случае, если полученный шестнадцатеричный символ равен только одной цифре.
Итак, вы хотите конвертировать * некоторые * ASCII символы в шестнадцатеричные? Какой из символов? (Полный список) –
Не можете ли вы просто заковать и заменить символы без символов ASCII шестнадцатеричным кодом? Вероятно, проще с регулярным выражением также ... –
Что случилось с 'encodeURIComponent()'? –