3

Here is a section of code used by CKEditor on my website:

CKEDITOR.config.IPS_BBCODE          = {"acronym":{"id":"8","title":"Acronym","desc":"Allows you to make an acronym that will display a description when moused over","tag":"acronym","useoption":"1","example":"[acronym='Laugh Out Loud']lol[/acronym]", ...

If you scroll to the right just a little, you will see this:

"[acronym='Laugh Out Loud']lol[/acronym]"

I need to store all of the CKEditor code inside a javascript string, but I can't figure out how to do it because the string has both " and ' in it. See the problem? Furthermore, I don't think I can just escape the quotes because I tried doing that and the editor didn't work.

Any idea what I can do?

Robert Harvey
  • 173,679
  • 45
  • 326
  • 490
Nate
  • 24,336
  • 33
  • 121
  • 207

3 Answers3

8

You might try taking the string and injecting JavaScript escape codes into it. JavaScript can essentially use any unicode value when using the format: \u#### - so, for a ' character, the code is \u0039, and for the " character, the code is \u0034.

So - you could encode your example portion of the string as:

\u0034[acronym=\u0039Laugh Out Loud\u0039]lol[/acronym]\u0034

Alternatively, you could attempt to simply escape the quotes as in:

\"[acronym=\'Laugh Out Loud\']lol[/acronym]\"

The problem here occurs when you wind up with this kind of situation:

"data:{'prop1':'<a href="/url/here/">back\\slash</a>'}"

Which, when escaped in this manner, becomes:

"data:{\'prop\':\'<a href=\"/url/here/\">back\\\\slash</a>\'}\"

While this is somewhat more readable than the first version - de-serializing it can be a little tricky when going across object-spaces, such as a javascript object being passed to a C# parser which needs to deserialize into objects, then re-serialize and come back down. Both languages use \ as their escape character, and it is possible to get funky scenarios which are brain-teasers to solve.

The advantage of the \u#### method is that only JavaScript generally uses it in a typical stack - so it is pretty easy to understand what part should be unescaped by what application piece.

Troy Alford
  • 25,881
  • 8
  • 62
  • 82
0

hmm.. you said you already tried to escape the quotes and it gave problems.
This shouldn't give problems at all, so try this:

$newstring = addslashes($oldstring);
Wampie Driessen
  • 1,549
  • 11
  • 17
0

There's no need to use Unicode escape sequences. Just surround your string with double quotes, and put a backslash before any double quotes within the string.

var x = "\"[acronym='Laugh Out Loud']lol[/acronym]\"";
JW.
  • 49,102
  • 33
  • 113
  • 138