Created
October 27, 2011 18:46
-
-
Save yeco/1320439 to your computer and use it in GitHub Desktop.
urlencode en javascript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function urlencode( str ) { | |
// * ejemplo 1: urlencode('Yeco is Lazy!'); | |
// * retorna 1: 'Yeco+is+Lazy%21' | |
// * ejemplo 2: urlencode('http://Yeco.isLazy.net/'); | |
// * retorna 2: 'http%3A%2F%2FYeco.isLazy.net%2F' | |
// * ejemplo 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'); | |
// * retorna 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a' | |
var histogram = {}, unicodeStr='', hexEscStr=''; | |
var ret = (str+'').toString(); | |
var replacer = function(search, replace, str) { | |
var tmp_arr = []; | |
tmp_arr = str.split(search); | |
return tmp_arr.join(replace); | |
}; | |
// el histograma es identico al que existe en urldecode. | |
histogram["'"] = '%27'; | |
histogram['('] = '%28'; | |
histogram[')'] = '%29'; | |
histogram['*'] = '%2A'; | |
histogram['~'] = '%7E'; | |
histogram['!'] = '%21'; | |
histogram['%20'] = '+'; | |
histogram['\u00DC'] = '%DC'; | |
histogram['\u00FC'] = '%FC'; | |
histogram['\u00C4'] = '%D4'; | |
histogram['\u00E4'] = '%E4'; | |
histogram['\u00D6'] = '%D6'; | |
histogram['\u00F6'] = '%F6'; | |
histogram['\u00DF'] = '%DF'; | |
histogram['\u20AC'] = '%80'; | |
histogram['\u0081'] = '%81'; | |
histogram['\u201A'] = '%82'; | |
histogram['\u0192'] = '%83'; | |
histogram['\u201E'] = '%84'; | |
histogram['\u2026'] = '%85'; | |
histogram['\u2020'] = '%86'; | |
histogram['\u2021'] = '%87'; | |
histogram['\u02C6'] = '%88'; | |
histogram['\u2030'] = '%89'; | |
histogram['\u0160'] = '%8A'; | |
histogram['\u2039'] = '%8B'; | |
histogram['\u0152'] = '%8C'; | |
histogram['\u008D'] = '%8D'; | |
histogram['\u017D'] = '%8E'; | |
histogram['\u008F'] = '%8F'; | |
histogram['\u0090'] = '%90'; | |
histogram['\u2018'] = '%91'; | |
histogram['\u2019'] = '%92'; | |
histogram['\u201C'] = '%93'; | |
histogram['\u201D'] = '%94'; | |
histogram['\u2022'] = '%95'; | |
histogram['\u2013'] = '%96'; | |
histogram['\u2014'] = '%97'; | |
histogram['\u02DC'] = '%98'; | |
histogram['\u2122'] = '%99'; | |
histogram['\u0161'] = '%9A'; | |
histogram['\u203A'] = '%9B'; | |
histogram['\u0153'] = '%9C'; | |
histogram['\u009D'] = '%9D'; | |
histogram['\u017E'] = '%9E'; | |
histogram['\u0178'] = '%9F'; | |
// Inicia con encodeURIComponent, que más se asemeja a las funciones de codificacio de PHP | |
ret = encodeURIComponent(ret); | |
for (unicodeStr in histogram) { | |
hexEscStr = histogram[unicodeStr]; | |
ret = replacer(unicodeStr, hexEscStr, ret); // Custom replace. No regexing | |
} | |
// Mayusculas para compatibilidad con PHP | |
return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) { | |
return "%"+m2.toUpperCase(); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment