out.write("document.write('<a href='str'> '+str.slice(beg+1,end)+' </a>');");
Aïe, vous avez quatre niveaux de codage de chaîne ici - pas étonnant que cela vous confondre. Vous avez une chaîne de texte à l'intérieur d'un nœud de texte HTML dans un littéral de chaîne JavaScript à l'intérieur d'un bloc HTML <script>
dans un littéral de chaîne Java.
Il est vraiment préférable d'éviter de faire ce genre de choses car il est si facile de se tromper. Il vous manque +
pour joindre str à la chaîne à l'intérieur de la valeur d'attribut; si str
contient un <
ou &
vous avez un problème dû à l'incorporation en HTML (pouvant entraîner des failles de sécurité de script intersite); si str
contient un espace ou des guillemets, vous avez un problème dû à l'incorporation dans une valeur d'attribut; la séquence est </
HTML invalide dans un bloc <script>
...
Alors que vous pouvez résoudre ce problème en piratant vos propres fonctions d'échappement de chaîne, je dirais que vous êtes mieux d'utiliser les fonctions qui ne concernent pas les chaînes bodging ensemble :
out.write(
"var link= document.createElement('a');\n"+
"link.href= str;\n"+
"link.appendChild(document.createTextNode(str.slice(beg+1, end)));\n"+
"document.getElementById('foo').appendChild(link);\n"
);
où foo
est l'élément dans lequel vous souhaitez que le lien apparaisse.
Je crois qu'il ne devrait pas y avoir d'espace entre '<' et 'a'. Il devrait juste être '
ya que je sais ... mais le problème est si j'écris