JavaScript: URL Encode All Non-whitelisted Characters

I want JavaScript functions that will work just like escape() but I want all non-whitelisted charachters to be encoded.

These charachters should be whitelisted:

bcdefghijklmnopqrstuvwxyzBCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

Because the letter "A" is not whitelisted, it should be URL encoded.

For example:
A test, 123-456

Should become:
%41%20test%2C%20123%2D456%20
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Demo</title>
</head>
<body>

<script type="text/javascript">
//<![CDATA[

var x = 'A test, 123-456';

alert(escapeNonWhitelisted(x));

function escapeNonWhitelisted(str) {
 return escape(str);
}

//]]>
</script>

</body>
</html>

Open in new window

LVL 16
hankknightAsked:
Who is Participating?
 
leakim971PluritechnicianCommented:
Test page : http://jsfiddle.net/mYJCx/

function escapeNonWhitelisted(str) {
    var escape char = "%";
    var whitelist = "bcdefghijklmnopqrstuvwxyzBCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
    return str.replace(/(.)/g,function($1) { return whitelist.indexOf($1)<0?escape char+$1.charCodeAt(0).toString(16):$1; });
}

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.