Невидимый разделитель для строк в HTML
Мне нужен способ идентифицировать определенные строки в разметке HTML. Я знаю, что такое строки, но возможно, что они могут быть подстроками других строк в документе. Чтобы найти их, я выдаю специальный символ разделителя (в настоящее время используется \032
). При загрузке страницы мы просматриваем HTML и записываем местоположение строк и удаляем разделитель.
К сожалению, большинство браузеров показывают символ разделителя, пока мы не сможем найти и удалить их все. Я хотел бы избежать этого, если это возможно. Есть ли символ или строка, которая будет сохранена в содержимом HTML (так что комментарий не работает), но не будет видимым для пользователя? Это также должно быть что-то, что вряд ли появится рядом с строкой, поэтому что-то вроде
тоже не сработает.
EDIT: Извините, я забыл упомянуть, что строки будут в атрибутах, поэтому любой тип тега не будет работать.
Ответы
Ответ 1
‌
- незакрепленный нулевой шириной (см. http://htmlhelp.org/reference/html40/entities/special.html)
Во избежание того, что это уже появляется в вашем тексте, удвойте его (например: ‌‌mytext‌‌
Изменить в ответ на комментарий: работает в Firefox 3. Обратите внимание, что вам нужно искать значение Unicode для объекта.
<html>
<body>
<div id="test">
This is a ‌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>
Ответ 2
Вы можете вставить их в элементы <span>
. Это будет работать только для текста на странице (не атрибутов и т.п.).
В противном случае вы можете вставить символ пробела, который ваша программа еще не выводит как часть HTML, например символ табуляции (\x09
), вертикальную вкладку (\x0b
), голый возврат каретки (\x0d
) — без новой строки рядом с ней, ala Windows text encoding — или, просто нулевой байт (\x00
).
Ответ 3
Лучшее, что мне хотелось бы вставить, которое не видно в браузере, будет парой тегов с некоторым специальным идентификатором, например <span id="delimiter" class="Delimiter"></span>
. Это не будет отображаться в содержимом, в то время как это может присутствовать в документе. Вам не нужно их удалять.
Ответ 4
Вы можете использовать знаки слева направо (LTR). Это для какого-то тестирования XSS? Если это так, это может представлять интерес: Поддержка Taint для PHP