You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2008/01/18 18:42:09 UTC
svn commit: r613214 -
/incubator/abdera/java/trunk/extensions/html/src/main/java/org/apache/abdera/ext/html/HtmlCleaner.java
Author: jmsnell
Date: Fri Jan 18 09:41:59 2008
New Revision: 613214
URL: http://svn.apache.org/viewvc?rev=613214&view=rev
Log:
Need to check for <, > and & in character data and escape it manually
Modified:
incubator/abdera/java/trunk/extensions/html/src/main/java/org/apache/abdera/ext/html/HtmlCleaner.java
Modified: incubator/abdera/java/trunk/extensions/html/src/main/java/org/apache/abdera/ext/html/HtmlCleaner.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/html/src/main/java/org/apache/abdera/ext/html/HtmlCleaner.java?rev=613214&r1=613213&r2=613214&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/html/src/main/java/org/apache/abdera/ext/html/HtmlCleaner.java (original)
+++ incubator/abdera/java/trunk/extensions/html/src/main/java/org/apache/abdera/ext/html/HtmlCleaner.java Fri Jan 18 09:41:59 2008
@@ -106,6 +106,39 @@
}
}
super.endElement(uri, localName, name);
+ }
+
+ @Override
+ public void characters(
+ char[] ch,
+ int start,
+ int length)
+ throws SAXException {
+ StringBuilder buf = new StringBuilder();
+ for (int n = start; n < (start + length); n++) {
+ if (ch[n] == '<') buf.append("<");
+ else if (ch[n] == '>') buf.append(">");
+ else if (ch[n] == '&') {
+ boolean isentity = false;
+ int i = n;
+ String ent = null;
+ for (; i < (start+length); i++) {
+ if (ch[i] == ';') {
+ ent = new String(ch,n,i-n+1);
+ isentity = ent.matches("\\&[\\w]*\\;");
+ break;
+ }
+ }
+ if (isentity) {
+ buf.append(ent);
+ n = i;
+ } else {
+ buf.append("&");
+ }
+ }
+ else buf.append(ch[n]);
+ }
+ super.characters(buf.toString().toCharArray(), 0, buf.length());
}
}
}