Làm cách nào để tìm xem chuỗi có chứa dữ liệu HTML hay không? Người dùng cung cấp đầu vào thông qua giao diện web và rất có thể anh ta có thể đã sử dụng văn bản đơn giản hoặc định dạng HTML được sử dụng.Cách tìm chuỗi có chứa dữ liệu html không?
Trả lời
Bạn có thể sử dụng cụm từ thông dụng để tìm kiếm thẻ HTML.
Ah, vấn đề cũ tốt # 2. Tom là đúng, regex là cách trực tiếp nhất để hoàn thành công việc và thường có rất nhiều ví dụ trực tuyến để giúp bạn tiếp tục. –
@Alex Larzelere: vấn đề # 2? Bạn có thể giải thích? Đây có phải là một tham chiếu xkcd ("bây giờ bạn đã có hai vấn đề"), hoặc cái gì khác? – CPerkins
@ Bí quyết chính xác. Ol '# 2, vấn đề # 1 tất nhiên là bất cứ điều gì bạn đang cố gắng làm ban đầu. –
Trong đậu ủng hộ của bạn, bạn có thể thử để tìm thẻ html như <b>
hay <i>
, vv ... Bạn có thể sử dụng biểu thức thông thường (chậm) hoặc chỉ cố gắng tìm ra "<>" chars. Nó phụ thuộc vào cách chắc chắn bạn muốn được rằng người dùng sử dụng html hay không.
Hãy nhớ rằng người dùng có thể viết <asdf>
. Nếu bạn muốn chắc chắn 100% rằng html được sử dụng là hợp lệ, bạn sẽ cần phải sử dụng một trình phân tích cú pháp html phức tạp từ một số thư viện (TidyHTML?)
Bạn phải nhận trợ giúp chỉ bằng các chuỗi biểu thức chính quy. Chúng giúp bạn tìm ra các thẻ html tiềm năng. Sau đó bạn có thể so sánh bên trong để chứa bất kỳ từ khóa html nào. Nếu nó được tìm thấy, hãy đưa ra một cảnh báo yêu cầu không sử dụng HTML. Hoặc đơn giản là xóa nó nếu bạn cảm thấy khác đi.
Nếu bạn không muốn người dùng có HTML trong dữ liệu nhập của họ, bạn có thể thay thế tất cả các ký tự '<' bằng thực thể HTML tương đương '& lt;' và tất cả '>' với '& gt;' (không có dấu cách giữa & và g)
Tôi biết đây là câu hỏi cũ nhưng tôi đã tìm kiếm thứ gì đó toàn diện hơn có thể phát hiện những thứ như thực thể HTML và bỏ qua các cách sử dụng khác của < và> ký hiệu. Tôi đã đến với lớp học sau đây hoạt động tốt.
Bạn có thể chơi với nó sống ở http://ideone.com/HakdHo
Tôi cũng tải lên này để GitHub với một loạt các bài kiểm tra JUnit.
package org.github;
/**
* Detect HTML markup in a string
* This will detect tags or entities
*
* @author [email protected] - David H. Bennett
*
*/
import java.util.regex.Pattern;
public class DetectHtml
{
// adapted from post by Phil Haack and modified to match better
public final static String tagStart=
"\\<\\w+((\\s+\\w+(\\s*\\=\\s*(?:\".*?\"|'.*?'|[^'\"\\>\\s]+))?)+\\s*|\\s*)\\>";
public final static String tagEnd=
"\\</\\w+\\>";
public final static String tagSelfClosing=
"\\<\\w+((\\s+\\w+(\\s*\\=\\s*(?:\".*?\"|'.*?'|[^'\"\\>\\s]+))?)+\\s*|\\s*)/\\>";
public final static String htmlEntity=
"&[a-zA-Z][a-zA-Z0-9]+;";
public final static Pattern htmlPattern=Pattern.compile(
"("+tagStart+".*"+tagEnd+")|("+tagSelfClosing+")|("+htmlEntity+")",
Pattern.DOTALL
);
/**
* Will return true if s contains HTML markup tags or entities.
*
* @param s String to test
* @return true if string contains HTML
*/
public static boolean isHtml(String s) {
boolean ret=false;
if (s != null) {
ret=htmlPattern.matcher(s).find();
}
return ret;
}
}
Tôi đang sử dụng regex:
[\S\s]*\<html[\S\s]*\>[\S\s]*\<\/html[\S\s]*\>[\S\s]*
Vì vậy, trong JAVA nó trông giống như:
text.matches("[\\S\\s]*\\<html[\\S\\s]*\>[\\S\\s]*\\<\\/html[\\S\\s]*\\>[\S\s]*");
Tệp phải khớp với bất kỳ tệp XML chính xác (cũng như một số không chính xác) nào đó có chứa phần tử "html". Vì vậy, có thể có dương tính giả.
Edit:
Kể từ khi tôi đã đăng tải rằng, tôi đã gỡ bỏ phần cuối cùng với yếu tố html bế mạc, như tôi đã tìm thấy một số trang web không sử dụng nó. (?!) Vì vậy, trong trường hợp, bạn thích dương tính giả để phủ định sai, tôi khuyến khích để làm điều đó!
Dưới đây sẽ khớp với bất kỳ thẻ nào.Bạn cũng có thể trích xuất thẻ, thuộc tính và giá trị
Pattern pattern = Pattern.compile("<(\\w+)(+.+)*>((.*))</\\1>");
Matcher matcher = pattern.matcher("<as testAttr='5'> TEST</as>");
if (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
System.out.println(i + ":" + matcher.group(i));
}
}
- 1. Tìm chỉ số của cột trong khung dữ liệu có chứa các chuỗi như giá trị
- 2. Linux - Tìm tệp có chứa chuỗi
- 3. Dò tìm chuỗi chỉ chứa không gian
- 4. Cách phát hiện xem trang HTML có chứa video không?
- 5. Tìm tệp không chứa chuỗi đã chọn
- 6. tìm tệp mà không chứa một chuỗi
- 7. Cách chèn một chuỗi có chứa "&"
- 8. Làm cách nào để tìm kiếm chuỗi mờ mà không có cơ sở dữ liệu nặng?
- 9. Xóa đường xóa có chứa dữ liệu
- 10. Tìm nạp dữ liệu từ cơ sở dữ liệu MySQL tới danh sách thả xuống html
- 11. Tìm chỉ mục trong một ArrayList có chứa một chuỗi
- 12. Làm cách nào để có được giá trị dữ liệu HTML dưới dạng chuỗi với jQuery?
- 13. Cách đặt dữ liệu có khớp chuỗi trước
- 14. Tách chuỗi trên dấu phẩy khi dữ liệu có thể chứa dấu phẩy
- 15. Dữ liệu nào chứa TObject?
- 16. Cách xác thực rằng một chuỗi không chứa HTML bằng C#
- 17. Cách tìm các tweet có chứa URL?
- 18. Làm thế nào để đưa dữ liệu có chứa dấu ngoặc kép trong biến chuỗi?
- 19. Cách tìm các dòng chứa một chuỗi trong linux
- 20. Cách kiểm tra xem chuỗi có chứa khoảng trắng không
- 21. Hết nguồn dữ liệu JNDI chứa
- 22. Cấu trúc dữ liệu nhanh hơn để tìm kiếm chuỗi
- 23. Tìm mà bảng có dữ liệu cột
- 24. jQuery: html() chức năng lấy dữ liệu cũ dưới dạng
- 25. Chuỗi std :: có chứa null được nhúng không?
- 26. Lô tô dữ liệu khung chứa NaNs
- 27. Highcharts không hiển thị chuỗi có nhiều điểm dữ liệu
- 28. Tìm kiếm dữ liệu Thesaurus
- 29. Làm cách nào để kiểm tra xem chuỗi chuỗi có chứa một chuỗi trong JavaScript không?
- 30. Cách tìm chu kỳ trong dữ liệu?
Có thể trùng lặp của [Cách xác thực chuỗi không chứa HTML bằng C#] (http://stackoverflow.com/questions/204646/how-to- validate-that-a-string-doesnt-contains-html-using-c-sharp) – nullpointer
OP muốn làm điều đó trong Java, đây là bản sao như thế nào? –