如何查找字符串中是否包含HTML数据?用户通过web界面提供输入,他很可能使用简单的文本或使用HTML格式。
发布于 2010-06-16 17:28:17
您可以使用正则表达式来搜索HTML标记。
发布于 2014-03-23 02:36:24
我知道这是一个古老的问题,但我遇到了这个问题,并且正在寻找更全面的东西,可以检测HTML实体,并忽略<和>符号的其他用法。我想出了下面这个类,它运行得很好。
你可以在http://ideone.com/HakdHo上现场体验
我还上传了一堆JUnit测试到GitHub上。
package org.github;
/**
* Detect HTML markup in a string
* This will detect tags or entities
*
* @author dbennett455@gmail.com - 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;
}
}
发布于 2010-06-16 17:29:12
在支持bean中,您可以尝试查找html标记,如<b>
或<i>
等。您可以使用正则表达式(慢速)或仅尝试查找"<>“字符。这取决于你对用户是否使用html的确信程度。
请记住,用户可以编写<asdf>
。如果您想100%确定所使用的html是有效的,那么您将需要使用某个库中的一个复杂的html解析器(也许是TidyHTML?)
https://stackoverflow.com/questions/3052052
复制相似问题