Невидимый разделитель для строк в HTML - PullRequest
53 голосов
/ 11 мая 2010

Мне нужен способ идентифицировать определенные строки в разметке HTML. Я знаю, что это за строки, но возможно, что они могут быть подстроки других строк в документе. Чтобы найти их, я вывожу специальный символ-разделитель (в настоящее время используется \032). При загрузке страницы мы просматриваем HTML, записываем расположение строк и удаляем разделитель.

К сожалению, большинство браузеров показывают символ разделителя, пока мы не сможем найти и удалить их все. Я хотел бы избежать этого, если это возможно. Есть ли символ или строка, которые будут сохранены в содержимом HTML (поэтому комментарий не будет работать), но не будут видны пользователю? Это также должно быть что-то, что вряд ли появится рядом со строкой, поэтому что-то вроде   тоже не сработает.

РЕДАКТИРОВАТЬ: Извините, я забыл упомянуть, что строки будут в атрибутах, поэтому любой вид тега не будет работать.

Ответы [ 4 ]

137 голосов
/ 12 мая 2010

‌ - несоединение нулевой ширины (см. http://htmlhelp.org/reference/html40/entities/special.html)

Если шанс, что это уже появится в вашем тексте, удвойте его (например: ‌‌mytext‌‌


Редактировать в ответ на комментарий: работает в Firefox 3. Обратите внимание, что вы должны искать значение Unicode объекта.

<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>
5 голосов
/ 11 мая 2010

Вы можете вставить их в <span> элементы. Это будет работать только для текста на странице (не для атрибутов и т. П.).

В противном случае вы можете вставить символ пробела, который ваша программа еще не выводит как часть HTML, например символ табуляции (\x09), вертикальную табуляцию (\x0b), возврат каретки (\x0d) & mdash; без новой строки, кроме Windows, текстовое кодирование Windows & mdash; или просто нулевой байт (\x00).

3 голосов
/ 11 мая 2010

Лучшая вещь, которую я хотел бы вставить, которая не видна в браузере, это пара тегов с каким-то специальным идентификатором, например <span id="delimiter" class="Delimiter"></span>. Это не будет отображаться в содержании, в то время как это может присутствовать в документе. Вам не нужно их удалять.

0 голосов
/ 12 мая 2010

Вы можете использовать метки слева направо (LTR) . Это для какого-то XSS-тестирования? Если это так, это может представлять интерес: Поддержка Taint для PHP

...