We help IT Professionals succeed at work.

Javascript: Using eval() with a string containing double quotes and single quotes

Webspeeder
Webspeeder asked
on
Medium Priority
2,984 Views
Last Modified: 2012-03-14
Hello all.

I am trying to "push" values into an array after they've been used in an eval() statement. The issue I'm running into is that with the way I'm concatenating the string, the double quotes inside the "text being evalled" is causing the eval() function to choke.

Here is an example.

Description fields is equal to -------->        This is a test, "yes", a test

eval("obj." + "description" + " = '" + $('#description').val() + "'");      

With this as an example, the " in "yes" messes things up. I've tried using " but the & then messes it up. I've also tried replacing the " with \".

Any suggestions on how to "escape" the double quote?
Comment
Watch Question

Commented:
have you tried replacing " with \\\" OR \\\\\"

That is escaping the the escaping character
Rajar AhmedConsultant
CERTIFIED EXPERT

Commented:
instead of
eval("obj." + "description" + " = '" + $('#description').val() + "'");
have u tried like below
eval("obj." + "description" + " = '" + $('#description').val().replace('"','\"') + "'");

Author

Commented:
replacing " with \" generates this JS error in firebug.

Error: missing ; before statement
Source File: http://10.9.10.220/js/jquery2/jquery-1.6.2.min.js
Line: 38, Column: 22
Source Code:
obj.description = '9' 6" 2PC 3LBL testing 3'

Well, looking at the message closely, why would this be tied to jQuery?

var xx = htmlEncode($('#description').val());
eval("obj." + "description" + " = '" + xx + "'");

function htmlEncode(value){
  return value.replace(/"/g,'\"');
}

Author

Commented:
When trying to "escape the escape character", I get this:

Error: missing ; before statement
Source File: http://10.9.10.220/js/jquery2/jquery-1.6.2.min.js
Line: 38, Column: 22
Source Code:
obj.description = '9' 6\\" 2PC 3LBL testing 3'

Author

Commented:
Might it be the single quote messing it up?

Author

Commented:
I've tried escaping both with \' and \"

Commented:
can you paste that portion of the code if you don't mind.
Analyst developer
CERTIFIED EXPERT
Commented:
Just use
obj["description"] = $("#description").val();

Open in new window

Author

Commented:
That did it. Thank you very much.