3

这是 CKEditor 在我的网站上使用的一段代码:

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]", ...

如果您向右滚动一点,您将看到:

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

我需要将所有 CKEditor 代码存储在 javascript 字符串中,但我不知道该怎么做,因为字符串中同时包含 " 和 ' 。看到问题了吗?此外,我认为我不能只是转义引号,因为我尝试这样做并且编辑器不起作用。

知道我能做什么吗?

4

3 回答 3

8

您可以尝试获取字符串并将 JavaScript 转义码注入其中。JavaScript 在使用以下格式时基本上可以使用任何 unicode 值:\u####- 因此,对于'字符,代码是\u0039,对于"字符,代码是\u0034.

所以 - 您可以将字符串的示例部分编码为:

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

或者,您可以尝试简单地转义引号,如下所示:

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

当您遇到这种情况时,就会出现这里的问题:

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

当以这种方式逃脱时,它变成:

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

虽然这比第一个版本更具可读性 - 反序列化它在跨越对象空间时可能有点棘手,例如将 javascript 对象传递给需要反序列化为对象的 C# 解析器,然后重新序列化和回来。两种语言都使用 \ 作为它们的转义字符,并且有可能得到一些需要解决脑筋急转弯的时髦场景。

\u####方法的优点是只有 JavaScript 通常在典型堆栈中使用它 - 因此很容易理解哪个部分应该被哪个应用程序片段转义。

于 2012-06-20T22:30:06.980 回答
0

嗯..你说你已经试图逃避引号,它给了问题。
这根本不应该给问题,所以试试这个:

$newstring = addslashes($oldstring);
于 2012-06-20T22:19:52.857 回答
0

无需使用 Unicode 转义序列。只需用双引号将您的字符串括起来,并在字符串中的任何双引号之前加上一个反斜杠。

var x = "\"[acronym='Laugh Out Loud']lol[/acronym]\"";
于 2012-06-20T22:45:35.387 回答