Citat imbricat - Nested quotation
Un citat imbricat este un citat care este încapsulat într-un alt citat, formând o ierarhie cu mai multe niveluri. Când vă concentrați asupra unei anumite citate, trebuie să o interpretați în sfera sa de aplicare. Citatele imbricate pot fi folosite în literatură (ca în narațiunea imbricată), vorbire și informatică (ca în afirmațiile „meta” care se referă la alte afirmații ca șiruri ). Cotațiunea imbricată poate fi foarte confuză până când este evaluată cu atenție și până când fiecare nivel de cotație este pus în perspectivă.
În literatură
În limbile care permit ghilimelele imbricate și folosesc punctuația ghilimelelor pentru a indica vorbirea directă, subnivelele ierarhice ale ghilimelelor sunt de obicei punctate alternând între ghilimele primare și ghilimele secundare. Pentru o analiză cuprinzătoare a principalelor sisteme de ghilimele utilizate în sistemele majore de scriere, consultați Ghilimele .
În programarea JavaScript
Citatele imbricate devin adesea o problemă folosind cuvântul cheie eval . Funcția eval este o funcție care convertește și interpretează un șir drept cod JavaScript real și rulează acel cod. Dacă șirul respectiv este specificat ca literal , atunci codul trebuie scris ca ghilimel însuși (și scăpat corespunzător).
De exemplu:
eval("var a=3; alert();");
Acest cod declară o variabilă a căreia i se atribuie valoarea 3 și o fereastră de alertă goală este afișată utilizatorului.
Șiruri imbricate (nivel 2)
Să presupunem că a trebuit să facem o cotație în interiorul codului interpretat citat. În JavaScript, puteți avea un singur subnivel de cotare fără scăpare, care trebuie să fie alternativul cotării de nivel superior. Dacă simbolul ghilimelului de nivelul 2 este același cu simbolul de primul nivel, aceste ghilimele trebuie să fie evitate. De exemplu:
alert("I don't need to escape here");
alert('Nor is it "required" here');
alert('But now I do or it won\'t work');
Șiruri imbricate (nivelul 3 și peste)
Mai mult, (spre deosebire de exemplul din literatură), citatul cuibărit de nivelul trei trebuie scăpat pentru a nu intra în conflict nici cu delimitatorii de cotați de primul, nici de al doilea nivel. Acest lucru este adevărat, indiferent de încapsularea simbolului alternativ. Fiecare nivel după al treilea nivel trebuie scăpat recursiv pentru toate nivelurile ghilimelelor în care este conținut. Aceasta include caracterul de evadare în sine, bara inversă („\”), care este scăpată de el însuși („\\”).
Pentru fiecare subnivel în care este conținută o bară inversă, aceasta trebuie scăpată la nivelul de deasupra acesteia, iar apoi toate barele oblice folosite pentru a scăpa de acea bară inversă, precum și de cea inversă originală, trebuie să fie evadate și așa mai departe și așa mai departe pentru fiecare nivel care este urcat. Aceasta este pentru a evita ambiguitatea și confuzia în evadare.
Iată câteva exemple care demonstrează unele dintre principiile de mai sus:
document.write("<html><head></head><body><p>Hello, this is the body of the document.");
document.writeln("</p>");
document.write("<p>A newline in HTML code
acts simply as whitespace, whereas a <br> starts a new line.");
document.write("</p></body></html>\n");
eval('eval(\"eval(\\\"alert(\\\\\\\"Now I\\\\\\\\\\\\\\\'m confused!\\\\\\\")\\\")\")');
Rețineți că numărul de bare oblice inversă crește de la 0 la 1 la 3 la 7 la 15, indicând o regulă pentru simbolurile imbricate succesiv.