2010-05-11 39 views
42

Tôi cần một cách để xác định các chuỗi nhất định trong đánh dấu HTML. Tôi biết các dây là gì, nhưng có thể chúng có thể là các chuỗi của các chuỗi khác trong tài liệu. Để tìm chúng, tôi xuất một ký tự phân cách đặc biệt (hiện đang sử dụng \032). Khi tải trang, chúng tôi đi qua HTML và ghi lại vị trí của các chuỗi và xóa dấu phân tách.Dấu phân tách vô hình cho chuỗi trong HTML

Thật không may, hầu hết các trình duyệt đều hiển thị ký tự dấu tách cho đến khi chúng tôi có thể tìm và xóa tất cả. Tôi muốn tránh điều đó nếu có thể. Có một ký tự hoặc chuỗi nào đó sẽ được giữ nguyên trong nội dung HTML (vì vậy nhận xét sẽ không hoạt động) nhưng sẽ không hiển thị với người dùng? Nó cũng cần phải được một cái gì đó là khá khó xuất hiện bên cạnh một chuỗi, do đó, một cái gì đó như   sẽ không hoạt động.

EDIT: Xin lỗi, tôi quên đề cập đến các chuỗi sẽ thuộc tính, vì vậy mọi loại thẻ sẽ không hoạt động.

+2

Có lẽ bạn chỉ có thể sử dụng một loạt các thẻ ''? – Thomas

+1

Tôi đồng ý Thomas, nhưng tôi muốn thêm anh ta nên thêm một lớp học cho họ như Đó là lý do tại sao họ sẽ dễ dàng tìm và thao tác. – joatis

Trả lời

112

‌ - zero-width phi joiner (xem http://htmlhelp.org/reference/html40/entities/special.html)

Trên cơ hội ra rằng điều này đã xuất hiện trong văn bản của bạn, tăng gấp đôi nó lên (ví dụ: ‌‌mytext‌‌


Chỉnh sửa để đáp ứng với nhận xét: hoạt động trong Firefox 3. Lưu ý rằng bạn phải tìm kiếm giá trị Unicode của thực thể.

<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> 
+0

Hoàn hảo! Mã đó thực hiện thủ thuật. – noah

+1

Bạn có thể vừa lưu lại cho tôi vài giờ googling – Linas

+1

Tuyệt vời !!! Cảm ơn. –

4

Bạn có thể chèn chúng vào các yếu tố <span>. Điều này sẽ chỉ hoạt động cho văn bản trong trang (không phải thuộc tính hoặc tương tự).

Nếu không, bạn có thể chèn một ký tự khoảng trắng mà chương trình của bạn không đã đầu ra như là một phần của HTML, giống như một ký tự tab (\x09), một tab dọc (\x0b), một chiếc xe ngựa trở lại trần (\x0d) — không một dòng mới bên cạnh nó, ala Mã hóa văn bản Windows — hoặc, chỉ một byte rỗng (\x00).

+0

Tab dọc! Nó là cái tốt. Tôi sẽ thử xem. – noah

+0

Windows không bao giờ sử dụng trở về vận chuyển mà không có một dòng mới sau đó; nó luôn luôn sử dụng cả hai trong kế. Bạn đang nghĩ về Mac cũ. –

+0

Vì vậy, vấn đề với các ký tự khoảng trống là DOM sẽ bình thường hóa và nếu không sẽ gây rối với chúng, do đó chúng không thể tìm thấy chúng một cách đáng tin cậy sau này. VT có xu hướng được chuyển đổi thành không gian trong DOM. – noah

3

Điều tốt nhất mà tôi muốn chèn, không hiển thị trên trình duyệt, sẽ là một cặp thẻ có một số id đặc biệt, như <span id="delimiter" class="Delimiter"></span>. Điều này sẽ không hiển thị trên nội dung, trong khi điều này có thể có mặt trong tài liệu. Bạn không cần phải xóa chúng.

+0

Xin lỗi, quên đề cập đến các chuỗi xuất hiện trong các thuộc tính, vì vậy các thẻ sẽ kết thúc được mã hóa. – noah

0

Bạn có thể sử dụng left-to-right (LTR) marks. Đây có phải là một số loại thử nghiệm XSS? Nếu vậy, điều này có thể quan tâm: Taint support for PHP

+0

Không XSS thực hiện. Nhãn hiệu LTR là gì? – noah

+0

Chúng đánh dấu hướng viết từ trái sang phải trong Unicode. Chúng không có hiệu lực khi ngôn ngữ còn lại từ trái sang phải. – Tgr

Các vấn đề liên quan