JavaScript equivalent to URLEncoder.encode("String", "UTF-8") of Java - javascript

I want to encode a string to UTF-8 in JavaScript. In java we use URLEncoder.encode("String", "UTF-8") to achieve this.
I know we can use encodeURI or encodeURIComponent but it is producing different output than URLEncoder.encode
Can anyone please suggest any available JS method that can be used to achieve same output as URLEncoder.encode.
NOTE:
Due to restrictions I cannot use jQuery.

I don't know if this javaURLEncode() function is a spot-on match for Java's URLEncoder.encode method, but it might be close to what you're looking for:
function javaURLEncode(str) {
return encodeURI(str)
.replace(/%20/g, "+")
.replace(/!/g, "%21")
.replace(/'/g, "%27")
.replace(/\(/g, "%28")
.replace(/\)/g, "%29")
.replace(/~/g, "%7E");
}
var testString = "It's ~ (crazy)!";
var jsEscape = escape(testString);
var jsEncodeURI = encodeURI(testString);
var jsEncodeURIComponent = encodeURIComponent(testString);
var javaURLEncoder = javaURLEncode(testString);
alert("Original: " + testString + "\n" +
"JS escape: " + jsEscape + "\n" +
"JS encodeURI: " + jsEncodeURI + "\n" +
"JS encodeURIComponent: " + jsEncodeURIComponent + "\n" +
"Java URLEncoder.encode: " + javaURLEncoder);

found one more character should be replaced
.replace(/\$/g, "%24")

Related

Concatenating with variables in a string

I'm just beginning my learning process and am stuck now on this one string. I've searched MDN, Google and Bing and not found any help.
My code instructions tell me to assign a variable, which I did. Then it wants me to test in console.log. I've done so, and when I do with spaces and punctuation, it gives me an error saying that it expected an identifier and instead saw '+'.
If I take the punctuation out I don't have an error, but no punctuation. If I take out the extra spaces as well as punctuation, I get a strange run-on sentence but no errors. I'm working this problem in Udacity, it is quiz 24 of lesson 2.
My code is:
var adjective1 = "amazing";
var adjective2 = "fun";
var adjective3 = "entertaining";
var madLib = "The intro to JavaScript course is " + adjective1. + " James and Julia are so " + adjective2. + " I cannot wait to work through the rest of this " + adjective3 + " content!";
console.log(madLib);
You need to add the dots as strings as well.
var adjective1 = "amazing";
var adjective2 = "fun";
var adjective3 = "entertaining";
var madLib = "The intro to JavaScript course is " + adjective1 + "."
+ " James and Julia are so " + adjective2 + "."
+ " I cannot wait to work through the rest of this " + adjective3 + " content!";
console.log(madLib);
The dot . has a special meaning in Javascript. It works as accessor for properties of an object.
Math.floor(1.5); // return the integer value of the given number
Read more here about property accessor.
Add . (dot) inside the double quoted part of string, not next to the variable.
It is a part of string, not a in-memory variable. And you are calling no function after that.
Below snippet works properly.
var adjective1 = "amazing";
var adjective2 = "fun";
var adjective3 = "entertaining";
var madLib = "The intro to JavaScript course is " + adjective1 + ". James and Julia are so " + adjective2 + ". I cannot wait to work through the rest of this " + adjective3 + " content!";
console.log(madLib);
Example of using dot to call a function. It is not required in this case since it is already a string.
var adjective1 = "amazing";
var adjective2 = "fun";
var adjective3 = "entertaining";
var madLib = "The intro to JavaScript course is " + adjective1.toString() + ". James and Julia are so " + adjective2.toString() + ". I cannot wait to work through the rest of this " + adjective3 + " content!";
console.log(madLib);

Replace keyword with a javascript expression

I have a string like hey! <input/>, Welcome in a template.
I need to replace every <input/> with the a JS expression this.input.
eg:
//Input
"hey! <input/>, Welcome";
Output should be:
"hey! " + this.input + ", Welcome";
I can do a replace on the string with " + this.input + " but the problem is what if <input/> at the start or the end?
What is the best way to handle this?
Edit:
I don't want the output to be a string. I want the output to be a valid JS expression.
Valid inputs:
1) "hey! <input/>, Welcome";
2) "<input/>, Welcome";
3) "Welcome <input/>"
Outputs:
1) "hey! " + this.input + ", Welcome";
2) this.input + ", Welcome";
3) "Welcome " + this.input;
As I wrote in comments above you can use:
var input = 'foo';
var str = "hey! <input/>, Welcome";
str = str.replace(/(.*?)<input\/>(.*)/, '$1' + this.input + '$2');
console.log(str);
//=> "hey! foo, Welcome"
"hey! <input/>, Welcome".replace(/<input\/>/, this.input);
EDIT:
John Reisig made a blog entry about making a minimal templating language parser in javascript. It's well written and may be a good starting point for your own templating language.

Uncaught Error: Syntax error, unrecognized expression: '.b-brand-box'

I am attempting to call a JavaScript function from jQuery. When I try to pass an argument to JavaScript function:
var brandRcObj = "b-brand-box";
$('.b-brand-box').on('mouseleave', function(){
brandOn(brandRcObj);
});
I am getting the following error:
"Uncaught Error: Syntax error, unrecognized expression: '.b-brand-box'"
I'm doing this because I will use the same mouseleave event multiple times in my project. Therefore I wanted to write a JavaScript function as follows:
function brandOn(brandClass){
var classObj = "'" + "." + brandClass + "'";
var imgObj = "'" + "." + brandClass + " " + "img" + "'";
$(classObj).css({
backgroundColor: 'white',
opacity: 1
});
$(imgObj).css({
opacity: 1
});
}
Thanks for yor help!
'.b-brand-box' is not a valid class selector – .b-brand-box is.
You are putting single quotes around the value you are dynamically generating, although there should not be any – you are mistaking the notation of a text literal in JavaScript syntax for its actual string value.
'.b-brand-box' is the notation of a text literal in JavaScript code, ".b-brand-box" would be another valid way of writing it. The value of both of those strings after the source code has been parsed is only .b-brand-box however.
What you actually want is just simply
"." + brandClass;
and nothing more.
You do not need all those quotes, where you have:
var classObj = "'" + "." + brandClass + "'";
var imgObj = "'" + "." + brandClass + " " + "img" + "'";
all you need is
var classObj = "." + brandClass;
var imgObj = "." + brandClass + " " + "img";
The interpreter knows you have a string

RegExp function not working with alternation

string=string.replace(RegExp(filter[a]+" | "+filter[a],"g"),filter[a])
For some reason, this isn't affecting both the filter followed by the space and the filter with a space in front. Assuming the filter is ",", it would take the second side and only replace " ," rather than " ," and ", ". The filter is user-specified, so I can't use a normal regular expression (which DOES work) such as string=string.replace(/, | ,/g,filter[a])
Can someone explain to me why it doesn't work and how to make it work?
It works for me:
s = 'abc, def,ghi ,klm'
a = ','
s = s.replace(RegExp(a + " | " + a, "g"), a)
"abc,def,ghi,klm"
Remember that you regular expression won't replace " , " with ",". You could try using this instead:
" ?" + filter[a] + " ?"

Whether this function is correct or not?

alert(window.location.href/&name=" + escape(name_var) + "&id=" + escape(id_var));
thanks
No, it's not correct.
alert(window.location.href + "&name=" + encodeURIComponent(name_var) + "&id=" + encodeURIComponent(id_var));
You have a syntax error in your code, the / that follows window.location.href
Use the concatenation operator, + - myString + "more string"
escape is deprecated, use encodeURI() and encodeURIComponent()

Categories

Resources