Phát hiện thẻ html

Tôi đã lo lắng về nhận xét của @mikep đối với câu trả lời của @Grant về lỗ hổng XSS. Đây sẽ là một điểm dừng hiển thị cho tôi

Nội dung chính Hiển thị

  • Để lại một câu trả lời
  • Làm cách nào để xóa thẻ HTML trong chuỗi js?
  • Làm cách nào để tách các thẻ HTML khỏi chuỗi?
  • Làm cách nào để bỏ qua các thẻ HTML?
  • Dải HTML là gì?

Một bài kiểm tra nhanh xác nhận điều đó là đúng

        {{foo| stripHTML}}
...

  data:function(){return {
    foo: "

some text

", }},

Điều này hiển thị cảnh báo, chứng tỏ Javascript đã được chèn và thực thi

Tôi đã tìm thấy một kỹ thuật để phân tích cú pháp HTML mà không cần đính kèm nó vào DOM trong câu trả lời này, điều này không dễ bị tấn công bằng hình ảnh

Tôi đã nghĩ ra phiên bản bộ lọc này của Grant, phiên bản này chỉ hiển thị thử nghiệm tương tự thành

Vue.filter('stripHTML', function (value) {
    let text = ''
    const parser = new DOMParser();
    const dom = parser.parseFromString(value, "text/html");
    let div = dom.querySelector('body>*');
    if(div){
        text = div.textContent || div.innerText || ''
    }
    return text
});
3 mà không có cảnh báo nào hiển thị

Vue.filter('stripHTML', function (value) {
    let text = ''
    const parser = new DOMParser();
    const dom = parser.parseFromString(value, "text/html");
    let div = dom.querySelector('body>*');
    if(div){
        text = div.textContent || div.innerText || ''
    }
    return text
});

Lưu ý điều này giả định rằng có một nút cấp cao nhất trong nội dung, chẳng hạn như

Vue.filter('stripHTML', function (value) {
    let text = ''
    const parser = new DOMParser();
    const dom = parser.parseFromString(value, "text/html");
    let div = dom.querySelector('body>*');
    if(div){
        text = div.textContent || div.innerText || ''
    }
    return text
});
4, nhưng bạn có thể mở rộng bộ chọn truy vấn để xử lý các trường hợp khác

Bình luận

  1. kịch bản của bạn hoạt động tuyệt vời. Chúc mừng

  2. cái này hay quá , tôi thích nó

  3. dải hàm (html)
    {
    var tmp = document. createElement("DIV");
    tmp. innerHTML = html;
    trả về tmp. văn bảnnội dung. tmp. văn bản bên trong;
    }

    • Điều này thậm chí còn tốt hơn cho nhu cầu của tôi. Không có vấn đề gì với các ký tự đặc biệt, v.v...

    • Đó là lời khuyên khủng khiếp

      Nếu vì lý do nào đó (chẳng hạn như mục đích xấu của người dùng) đối số html chứa thẻ script, thì bạn đã mở ra cho các cuộc tấn công XSS

      Không sử dụng DOM cho những thứ không cần thiết

      Ngoài ra, DOM rất chậm

    • Giải pháp này rất phù hợp để sử dụng nội dung bên trong của đoạn văn trong cửa sổ Cảnh báo JS – nó loại bỏ nbsp và em một cách hiệu quả,
      cảm ơn

    • Cái đinh ghim,
      Đáng yêu. Làm việc tuyệt vời

    • Nếu bạn không cần hỗ trợ IE6, có thể thử sử dụng trực tiếp DOMParser vì nó sẽ không tải xuống hình ảnh cũng như không thực thi tập lệnh

      function stripHtml(dirtyString) {
        const doc = new DOMParser().parseFromString(dirtyString, 'text/html');
        return doc.body.textContent || '';
      }
      

      Bây giờ nếu bạn chạy thứ gì đó như

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      5, nó sẽ không gây ra sự cố trong khi vẫn cho phép trình duyệt thực hiện công việc

    • Lót

      Đây là một lớp lót nếu bạn vẫn đang sử dụng jQuery

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      6

  4. này. điều này thật nực cười

  5. Cảm ơn bạn cho ví dụ tuyệt vời

  6. Cảm ơn, điều này thực hiện chính xác những gì tôi cần (và cũng chính xác như vậy. )

  7. Cảm ơn. Ghi chú nhanh về regrec. chữ “i” không cần thiết ở đây vì không có ký tự nào phân biệt chữ hoa chữ thường. Tuy nhiên, nó thực hiện chính xác những gì bạn muốn

  8. Đẹp, nhưng dấu ngoặc đơn là không cần thiết

    .replace(/<[^>]+>/ig,””);

    • Xin chào. )

      Tôi đã thấy biểu mẫu liên hệ của bạn và tôi phải nói rằng tôi thích nó.
      Bạn có hướng dẫn hay gì tương tự không? . )^
      Mong nhận được tin tức từ bạn,

      Một độc giả người Pháp,

      Florian

    • Cảm ơn vì kịch bản. )

      @Ricard. Nếu bạn muốn tạo một bản sao của biểu mẫu liên hệ, chỉ cần xem nguồn hoặc lưu trang này vào địa phương của bạn;)

    • trang web đẹp cảm ơn bạn vì ví dụ tuyệt vời

    • /i cho trường hợp không phân biệt chữ hoa chữ thường được khuyến nghị.
      Khi sử dụng nội dung có thể chỉnh sửa, IE tạo thẻ chữ hoa, mozilla sẽ chỉ tạo chữ thường… Để loại bỏ những thẻ bạn cần, nó không phân biệt chữ hoa chữ thường.

      • DScout, điều này là không chính xác. Không có ký tự chữ cái được chỉ định trong biểu thức chính quy - do đó, công cụ sửa đổi phân biệt chữ hoa chữ thường không ảnh hưởng gì

    • Xin chào

      Tôi có đoạn mã sau

      var text = ‘[$ ssIncludeXml(docName,”wcm. gốc/wcm. phần tử[@name=’innerpage_content’]/text()”) $]’;
      var StrippedString = text. thay thế(/(]+)>)/ig,””);

      trong đó ‘[$ ssIncludeXml(docName,”wcm. gốc/wcm. phần tử[@name=’innerpage_content’]/text()”) $]’
      là tập lệnh Idoc mang khối HTML từ trình giữ chỗ. Nhưng tôi đang gặp Lỗi "chuỗi ký tự chưa kết thúc" ở dòng đầu tiên.

      Điều tôi muốn làm là xóa hoặc loại bỏ tất cả các thẻ HTML và lấy văn bản thuần túy ra khỏi đánh dấu đó

      Vui lòng cho tôi biết nếu có bất kỳ giải pháp nào

      Cảm ơn

    • hoạt động tuyệt vời nhưng không loại bỏ khoảng trắng….  

    • Cảm ơn bạn. Nó rất hữu ích cho tôi và tôi nghĩ nó hữu ích cho mọi người.
      Cảm ơn bạn một lần nữa.

    • Vâng, giải pháp này đã loại bỏ tất cả các loại HTML, đoạn văn, ngắt dòng, kiểu nội tuyến, v.v.

    • Điều này không hoạt động cho IE. Vui lòng cung cấp giải pháp để loại bỏ thẻ trong javascript hoạt động cho tất cả các trình duyệt

    • Cảm ơn vì tập lệnh này
      Nó hoạt động rất tốt

    • tôi đang thử nó

      tin nhắn var;

          firstName = document.getElementById("username").value;
      
          if (firstName == null || firstName == "" || firstName == NaN || firstName == "First Name") {
              message = "Please Add some name.";
              document.body.insertAdjacentHTML("BeforeEnd", "" + message + "");
          }
          else {
              if (document.getElementById("myMessage")) {
                  debugger;
                  arguments = document.getElementById("myMessage").value.replace(/(]+)>)/ig, "");
              }
          }
      

      nhưng nó không hoạt động và nói

      không thể gọi phương thức 'thay thế' không xác định

    • Tôi muốn biết cách triển khai tính năng này nếu tôi chỉ muốn xóa các thẻ href khỏi một chuỗi văn bản, thay vì xóa tất cả các thẻ? .
      Hy vọng điều này có ý nghĩa, cảm ơn trước.

    • Điều này thật xuất sắc. Cảm ơn

    • “\S” của bạn bị thiếu… hay không?

      ________số 8
      • \S có nghĩa là không phải khoảng trắng và ^> có nghĩa là không lớn hơn, do đó, biểu thức chính quy đã sửa đổi của bạn chỉ đảm bảo rằng các thẻ ký tự đơn sẽ không bị thay thế

    • Cảm ơn,
      Nó hoạt động tốt.

    • Mát mẻ. Cái này hoạt động hoàn hảo…

    • Còn < b r / > hoặc < h r / > (các thẻ tự đóng) thì sao?

    • Có vẻ như “newInput” không làm gì cả?

    • Tôi đã phát triển điều tương tự bằng cách sử dụng Biểu thức chính quy javascript.
      Nó sẽ loại bỏ tất cả các thẻ html trừ thẻ do người dùng cung cấp trong danh sách loại trừ.
      mã nguồn cũng có sẵn trên github
      kiểm tra tại đây. Công cụ tách thẻ HTML

    • Đẹp, nhưng nó không an toàn… Tôi muốn sử dụng jQuery hơn

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      7

    • tài liệu. thân thể. nội dung

      b”> ~ fail

    • Nhưng mã này không hoạt động tốt với nội dung bảng HTML

    • Làm cách nào để loại bỏ tất cả các thẻ ngoại trừ thẻ neo và thẻ img?

    • Bạn có thể dễ dàng bỏ qua phân biệt chữ hoa chữ thường /i và nhóm ()

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      0
    • sử dụng jQuery
      jQuery(stringWithTags). văn bản()

    • jQuery(stringWithTags). text();
      đó là điều tôi muốn. tanx…

    • không hoạt động với AngularJS

    • Mohammad Mustafa Ahmedzai

      Có lẽ đơn giản nhất có lẽ tôi tìm thấy trực tuyến. Cảm ơn rất nhiều cho nó. làm việc tốt

    • Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      1

    • Có ai thấy cách giải quyết này ảnh hưởng lớn đến văn bản này không

      Số làm tròn < 3 dễ dàng hơn cho mọi người sử dụng trong tính toán, vì chúng rất nhỏ so với các số >=3

      trở thành. Số tiền làm tròn =3

    • Cách an toàn để sử dụng DOM để loại bỏ html

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      2
    • Tôi đã kết hợp một hàm cho phép giữ lại một số thẻ, tương tự như cách hoạt động của hàm php

      Như với PHP, nó đi kèm với hai lưu ý sau

      Bởi vì strip_tags() không thực sự xác thực HTML, một phần hoặc thẻ bị hỏng có thể dẫn đến việc xóa nhiều văn bản/dữ liệu hơn dự kiến

      Chức năng này không sửa đổi bất kỳ thuộc tính nào trên các thẻ mà bạn cho phép sử dụng allowable_tags, bao gồm các thuộc tính kiểu và onmouseover mà người dùng tinh nghịch có thể lạm dụng khi đăng văn bản sẽ được hiển thị cho những người dùng khác

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      3

      Các kiểm tra bổ sung đã được thực hiện để ngăn các thẻ không hợp lệ bị xóa nếu có thể, bằng cách đảm bảo rằng việc mở từng thẻ bắt đầu bằng một tên thẻ tiềm năng; . Nhận xét sẽ được giữ lại nhưng có thể bị xóa bằng biểu thức chính quy tương tự

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      4
      • Xin chào

        Tôi không muốn làm phiền bạn, nhưng có vẻ như dòng cuối cùng của chức năng của bạn đã bị hỏng bằng cách nào đó - đó không phải là một Regex hợp lệ. Bất kỳ cơ hội bạn có thể sửa chữa nó?

    • Chào các bạn. Tôi hiện đang gặp sự cố javascript với chức năng regex/thay thế mà bạn đề cập ở đây.
      Tôi muốn đưa văn bản vào một số thẻ HTML của nó.

      Đối với điều này, tôi sử dụng chức năng

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      0

      Ở đây tất cả các thẻ đã bị xóa

      Nhưng tôi muốn giữ các thẻ và và tìm thấy hai chức năng riêng biệt này phù hợp với tôi

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      1

      Bạn có biết làm thế nào để kết hợp hai điều kiện trong một?

    • Thao tác này không chỉ xóa các ký tự vi phạm mà cả phần còn lại của văn bản

    • Tại sao bạn không sử dụng Element. văn bảnNội dung?

    • Chỉ là những gì tôi cần...Cảm ơn

    • Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      8
      đã thêm khoảng trắng sau chữ V để cho phép những nội dung như. “< hey >”

    • một mẹo khác. sử dụng khả năng của trình duyệt để xóa thẻ

      Vue.filter('stripHTML', function (value) {
          let text = ''
          const parser = new DOMParser();
          const dom = parser.parseFromString(value, "text/html");
          let div = dom.querySelector('body>*');
          if(div){
              text = div.textContent || div.innerText || ''
          }
          return text
      });
      
      2
    • Xin chào ngài. Xin vui lòng tôi muốn biết nếu tôi có thể nhận được sự giúp đỡ từ bạn.
      Tôi có một bài gửi ở giao diện người dùng mà người dùng có thể chia sẻ bài viết của họ nhưng sẽ muốn xóa mọi liên kết trên biểu mẫu.
      Có cách nào để thực hiện việc này chỉ dành cho bài đăng được gửi bởi người dùng không phải là quản trị viên không?
      Cảm ơn
      Tôi đã có .

    Để lại một câu trả lời

    Làm cách nào để xóa thẻ HTML trong chuỗi js?

    Để loại bỏ tất cả các thẻ HTML khỏi một chuỗi, có rất nhiều quy trình trong JavaScript. Để loại bỏ các thẻ, chúng ta có thể sử dụng hàm replace() và cũng có thể sử dụng. thuộc tính textContent,. thuộc tính InternalText từ HTML DOM .

    Làm cách nào để tách các thẻ HTML khỏi chuỗi?

    Có thể xóa các thẻ HTML khỏi một chuỗi đã cho bằng cách sử dụng phương thức replaceAll() của lớp Chuỗi . Chúng tôi có thể xóa các thẻ HTML khỏi một chuỗi nhất định bằng cách sử dụng biểu thức chính quy. Sau khi xóa các thẻ HTML khỏi một chuỗi, nó sẽ trả về một chuỗi dưới dạng văn bản bình thường.

    Làm cách nào để bỏ qua các thẻ HTML?

    Nếu bạn có một phần hoặc phần nhất định của tài liệu HTML hoặc XHTML mà bạn muốn Trình xác thực HTML CSE bỏ qua, thì bạn có thể đính kèm phần đó trong thẻ "cseignore".

    Dải HTML là gì?

    stripHtml( html ) Thay đổi chuỗi HTML được cung cấp thành chuỗi văn bản thuần túy bằng cách chuyển đổi
    ,

    , và

    để ngắt dòng, loại bỏ tất cả các thẻ khác và chuyển đổi các ký tự thoát thành giá trị hiển thị của chúng