3 votes

Trop de guillemets entre guillemets - que faire ?

Voici une section du code utilisé par CKEditor sur mon site web :

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

Si vous faites défiler vers la droite juste un peu, vous verrez ceci :

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

J'ai besoin de stocker tout le code de CKEditor dans une chaîne javascript, mais je n'arrive pas à trouver comment le faire parce que la chaîne contient à la fois " et '. Vous voyez le problème ? De plus, je ne pense pas que je puisse simplement échapper aux guillemets, car j'ai essayé de le faire et l'éditeur n'a pas fonctionné.

Une idée de ce que je peux faire ?

8voto

Troy Alford Points 8676

Vous pouvez essayer de prendre la chaîne et d'y injecter des codes d'échappement JavaScript. JavaScript peut essentiellement utiliser n'importe quelle valeur unicode lorsqu'il utilise le format : \u#### - donc, pour un ' le code est \u0039 et pour le " le code est \u0034 .

Ainsi, vous pourriez coder la partie de votre exemple de chaîne de caractères comme suit :

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

Vous pouvez également essayer d'échapper aux guillemets comme dans :

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

Le problème se pose lorsque l'on se retrouve dans ce genre de situation :

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

Qui, lorsqu'il est échappé de cette manière, devient :

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

Bien qu'il soit un peu plus lisible que la première version, sa désérialisation peut s'avérer un peu délicate lorsqu'il s'agit de traverser des espaces-objets, par exemple lorsqu'un objet javascript est transmis à un analyseur C# qui doit le désérialiser en objets, puis le re-sérialiser et le redescendre. Les deux langages utilisent \N comme caractère d'échappement, et il est possible d'obtenir des scénarios funky qui sont des casse-têtes à résoudre.

L'avantage de la \u#### est que seul JavaScript l'utilise généralement dans une pile typique - il est donc assez facile de comprendre quelle partie doit être désencapsulée par quel élément d'application.

0voto

Wampie Driessen Points 1519

Hmm vous avez dit que vous aviez déjà essayé d'échapper aux guillemets et que cela posait problème.
Cela ne devrait pas poser de problème du tout, alors essayez ceci :

$newstring = addslashes($oldstring);

0voto

JW. Points 17361

Il n'est pas nécessaire d'utiliser les séquences d'échappement Unicode. Il suffit d'entourer votre chaîne de caractères de guillemets doubles et de placer une barre oblique inversée avant tout guillemet double dans la chaîne.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X