Comment nichez-vous des devis en HTML au-delà du deuxième niveau? Autant que je sache, il n'y a que 2 types de citations - célibataire (') et doubles ("). Je suis au courant de s'échapper à l'aide de slashes - vous devez vous échapper dans le code, mais que l'échappement ne fonctionnera pas au niveau du navigateur . Quelle est la méthode acceptée pour contourner quelque chose comme ce qui suit?
<p onclick="exampleFunc('<div id="divId"></div>');">Some Text</p>
Ce code est imprimé sur le navigateur:
'); "> Du texte
Vous devez utiliser correctement l'évacuation/encodage. Soit en HTML à l'aide de références de caractères:
<p onclick="exampleFunc('<div id="divId"></div>');">Some Text</p>
Ou en JavaScript à l'aide de String Escape séquences:
<p onclick="exampleFunc('\x3Cdiv\x20id\x3D\x22divId\x22\x3E\x3C/div\x3E');">Some Text</p>
EDIT: Ce n'est pas une solution pour JavaScript dans HTML, mais pour JavaScript uniquement. Ma faute...
eval('eval(\"eval(\\\"alert(\\\\\\\"Now I\\\\\\\\\\\\\\\'m confused!\\\\\\\")\\\")\")');
Link . C'est "une échappée récursive".
const _advanceEscapeCount = (escapeCount, level) => {
const linearPosition = Math.log(escapeCount + 1) / Math.log(2);
return Math.pow(2, (linearPosition + level)) - 1;
};
const deepNestQuotes = (str, level) => {
for (let i = str.length - 1; i >=0 ; i--) {
if (str[i] === '"') {
const index = i;
let count = 0;
while (str[i - 1] === '\\') {
count++;
i--;
}
const firstPart = str.substr(0,index - count);
const lastPart = str.substr(index,str.length);
const escapedCount = _advanceEscapeCount(count, level);
str = firstPart + '\\'.repeat(escapedCount) + lastPart;
//str = firstPart + escapedCount + lastPart;
}
}
return str;
};
deepNestQuotes("1st-level-begin \"2nd-begin \\\"3rd-begin \\\\\\\"4th level\\\\\\\" 3rd-end\\\" 2nd-end\" 1st-level-end", 1);
deepNestQuotes("1st-level-begin \"2nd-begin \\\"3rd-begin \\\\\\\"4th level\\\\\\\" 3rd-end\\\" 2nd-end\" 1st-level-end", 2);