web-dev-qa-db-fra.com

Délimiteur invisible pour les chaînes en HTML

J'ai besoin d'un moyen d'identifier certaines chaînes dans le balisage HTML. Je sais quelles sont les chaînes, mais il est possible qu'elles puissent être des sous-chaînes d'autres chaînes dans le document. Pour les trouver, je génère un caractère délimiteur spécial (utilisant actuellement \032). Au chargement de la page, nous parcourons le HTML et enregistrons l'emplacement des chaînes, et supprimons le délimiteur.

Malheureusement, la plupart des navigateurs affichent le caractère délimiteur jusqu'à ce que nous puissions tous les trouver et les supprimer. J'aimerais éviter cela si possible. Y a-t-il un caractère ou une chaîne qui sera conservé dans le contenu HTML (donc un commentaire ne fonctionnera pas) mais ne sera pas visible pour l'utilisateur? Il doit également être quelque chose qui est peu susceptible d'apparaître à côté d'une chaîne, donc quelque chose comme   ne fonctionnerait pas non plus.

EDIT: Désolé, j'ai oublié de mentionner que les chaînes seront dans des attributs, donc toute sorte de balise ne fonctionnera pas.

53
noah

‌ - non-joiner de largeur nulle (voir http://htmlhelp.org/reference/html40/entities/special.html )

Si cela apparaît déjà dans votre texte, doublez-le (par exemple: ‌‌mytext‌‌


Modifier en réponse au commentaire: fonctionne dans Firefox 3. Notez que vous devez rechercher la valeur Unicode de l'entité.

<html>
<body>
    <div id="test">
        This is a &zwnj;test
    </div>

    <script type="application/javascript">
        var myDiv = document.getElementById("test");
        var content = myDiv.innerHTML;
        var pos = content.indexOf("\u200C");
        alert(pos);
    </script>
</body>
</html>
138
Anon

Vous pouvez les insérer dans <span> éléments. Cela ne fonctionnera que pour le texte sur la page (pas les attributs ou similaires).

Sinon, vous pourriez insérer un caractère d'espace que votre programme ne produit pas déjà dans le cadre du code HTML, comme un caractère de tabulation (\x09), un onglet vertical (\x0b), un retour chariot nu (\x0d) - sans une nouvelle ligne à côté, ala codage de texte Windows - ou, juste un octet nul (\x00).

5
amphetamachine

La meilleure chose que j'aimerais insérer, qui n'est pas visible sur le navigateur, sera une paire de balises avec un identifiant spécial, comme <span id="delimiter" class="Delimiter"></span>. Cela n'apparaîtra pas sur le contenu, alors que cela peut être présent dans le document. Vous n'avez pas besoin de les supprimer.

3
Kangkan

Vous pouvez utiliser marques de gauche à droite (LTR) . Est-ce pour une sorte de test XSS? Si tel est le cas, cela pourrait être intéressant: Taint support for PHP

0
Tgr