You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sc...@apache.org on 2005/08/02 15:52:00 UTC
svn commit: r227000 - in
/myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html:
HtmlResponseWriterImpl.java util/HTMLEncoder.java util/UnicodeEncoder.java
Author: schof
Date: Tue Aug 2 06:51:55 2005
New Revision: 227000
URL: http://svn.apache.org/viewcvs?rev=227000&view=rev
Log:
Fixes MYFACES-272 (Patch by Kalle Korhonen)
Modified:
myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/HtmlResponseWriterImpl.java
myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/HTMLEncoder.java
myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/UnicodeEncoder.java
Modified: myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/HtmlResponseWriterImpl.java
URL: http://svn.apache.org/viewcvs/myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/HtmlResponseWriterImpl.java?rev=227000&r1=226999&r2=227000&view=diff
==============================================================================
--- myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/HtmlResponseWriterImpl.java (original)
+++ myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/HtmlResponseWriterImpl.java Tue Aug 2 06:51:55 2005
@@ -46,6 +46,7 @@
private static final String DEFAULT_CONTENT_TYPE = "text/html";
private static final String DEFAULT_CHARACTER_ENCODING = "ISO-8859-1";
+ private static final String UTF8 = "UTF-8";
private boolean _writeDummyForm = false;
private Set _dummyFormParams = null;
@@ -82,13 +83,13 @@
_contentType = contentType;
if (_contentType == null)
{
- if (log.isInfoEnabled()) log.debug("No content type given, using default content type " + DEFAULT_CONTENT_TYPE);
+ if (log.isDebugEnabled()) log.debug("No content type given, using default content type " + DEFAULT_CONTENT_TYPE);
_contentType = DEFAULT_CONTENT_TYPE;
}
_characterEncoding = characterEncoding;
if (_characterEncoding == null)
{
- if (log.isInfoEnabled()) log.debug("No character encoding given, using default character encoding " + DEFAULT_CHARACTER_ENCODING);
+ if (log.isDebugEnabled()) log.debug("No character encoding given, using default character encoding " + DEFAULT_CHARACTER_ENCODING);
_characterEncoding = DEFAULT_CHARACTER_ENCODING;
}
}
@@ -264,7 +265,7 @@
_writer.write(' ');
_writer.write(name);
_writer.write("=\"");
- _writer.write(HTMLEncoder.encode(strValue, false, false));
+ _writer.write(HTMLEncoder.encode(strValue, false, false, !UTF8.equals(_characterEncoding)));
_writer.write('"');
}
}
@@ -286,7 +287,7 @@
_writer.write("=\"");
if (strValue.toLowerCase().startsWith("javascript:"))
{
- _writer.write(HTMLEncoder.encode(strValue, false, false));
+ _writer.write(HTMLEncoder.encode(strValue, false, false, !UTF8.equals(_characterEncoding)));
}
else
{
@@ -347,11 +348,13 @@
if (isScriptOrStyle())
{
- _writer.write(UnicodeEncoder.encode(strValue, false, false));
+ // Don't bother encoding anything if chosen character encoding is UTF-8
+ if (UTF8.equals(_characterEncoding)) _writer.write(strValue);
+ else _writer.write(UnicodeEncoder.encode(strValue) );
}
else
{
- _writer.write(HTMLEncoder.encode(strValue, false, false));
+ _writer.write(HTMLEncoder.encode(strValue, false, false, !UTF8.equals(_characterEncoding)));
}
}
@@ -371,21 +374,23 @@
if (isScriptOrStyle())
{
String strValue = new String(cbuf, off, len);
- _writer.write(UnicodeEncoder.encode(strValue, false, false));
+ // Don't bother encoding anything if chosen character encoding is UTF-8
+ if (UTF8.equals(_characterEncoding)) _writer.write(strValue);
+ else _writer.write(UnicodeEncoder.encode(strValue) );
}
else if (isTextarea())
{
// For textareas we must *not* map successive spaces to   or Newlines to <br/>
// TODO: Make HTMLEncoder support char arrays directly
String strValue = new String(cbuf, off, len);
- _writer.write(HTMLEncoder.encode(strValue, false, false));
+ _writer.write(HTMLEncoder.encode(strValue, false, false, !UTF8.equals(_characterEncoding)));
}
else
{
// We map successive spaces to and Newlines to <br/>
// TODO: Make HTMLEncoder support char arrays directly
String strValue = new String(cbuf, off, len);
- _writer.write(HTMLEncoder.encode(strValue, true, true));
+ _writer.write(HTMLEncoder.encode(strValue, true, true, !UTF8.equals(_characterEncoding)));
}
}
@@ -429,7 +434,9 @@
{
closeStartTagIfNecessary();
String strValue = new String(cbuf, off, len);
- _writer.write(UnicodeEncoder.encode(strValue, false, false));
+ // Don't bother encoding anything if chosen character encoding is UTF-8
+ if (UTF8.equals(_characterEncoding)) _writer.write(strValue);
+ else _writer.write(UnicodeEncoder.encode(strValue) );
}
public void write(int c) throws IOException
@@ -442,7 +449,9 @@
{
closeStartTagIfNecessary();
String strValue = new String(cbuf);
- _writer.write(UnicodeEncoder.encode(strValue, false, false));
+ // Don't bother encoding anything if chosen character encoding is UTF-8
+ if (UTF8.equals(_characterEncoding)) _writer.write(strValue);
+ else _writer.write(UnicodeEncoder.encode(strValue) );
}
public void write(String str) throws IOException
@@ -452,7 +461,9 @@
// in such case, do not call down the writer chain
if (str.length() > 0)
{
- _writer.write(UnicodeEncoder.encode(str, false, false));
+ // Don't bother encoding anything if chosen character encoding is UTF-8
+ if (UTF8.equals(_characterEncoding)) _writer.write(str);
+ else _writer.write(UnicodeEncoder.encode(str) );
}
}
@@ -460,7 +471,9 @@
{
closeStartTagIfNecessary();
String strValue = str.substring(off, off+len);
- _writer.write(UnicodeEncoder.encode(strValue, false, false));
+ // Don't bother encoding anything if chosen character encoding is UTF-8
+ if (UTF8.equals(_characterEncoding)) _writer.write(str);
+ else _writer.write(UnicodeEncoder.encode(str) );
}
// DummyFormResponseWriter support
Modified: myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/HTMLEncoder.java
URL: http://svn.apache.org/viewcvs/myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/HTMLEncoder.java?rev=227000&r1=226999&r2=227000&view=diff
==============================================================================
--- myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/HTMLEncoder.java (original)
+++ myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/HTMLEncoder.java Tue Aug 2 06:51:55 2005
@@ -40,14 +40,25 @@
}
/**
+ * Variant of {@link #encode} where encodeNbsp is true.
+ */
+ public static String encode (String string, boolean encodeNewline, boolean encodeSubsequentBlanksToNbsp)
+ {
+ return encode(string, encodeNewline, true);
+ }
+
+
+ /**
* Encodes the given string, so that it can be used within a html page.
* @param string the string to convert
* @param encodeNewline if true newline characters are converted to <br>'s
* @param encodeSubsequentBlanksToNbsp if true subsequent blanks are converted to &nbsp;'s
+ * @param encodeNonLatin if true encode non-latin characters as numeric character references
*/
public static String encode (String string,
boolean encodeNewline,
- boolean encodeSubsequentBlanksToNbsp)
+ boolean encodeSubsequentBlanksToNbsp,
+ boolean encodeNonLatin)
{
if (string == null)
{
@@ -83,13 +94,13 @@
break;
//german umlauts
- case '\u00E4' : app = "ä"; break;
- case '\u00C4' : app = "Ä"; break;
- case '\u00F6' : app = "ö"; break;
- case '\u00D6' : app = "Ö"; break;
- case '\u00FC' : app = "ü"; break;
- case '\u00DC' : app = "Ü"; break;
- case '\u00DF' : app = "ß"; break;
+ case '\u00E4' : if (encodeNonLatin) app = "ä"; break;
+ case '\u00C4' : if (encodeNonLatin) app = "Ä"; break;
+ case '\u00F6' : if (encodeNonLatin) app = "ö"; break;
+ case '\u00D6' : if (encodeNonLatin) app = "Ö"; break;
+ case '\u00FC' : if (encodeNonLatin) app = "ü"; break;
+ case '\u00DC' : if (encodeNonLatin) app = "Ü"; break;
+ case '\u00DF' : if (encodeNonLatin) app = "ß"; break;
//misc
//case 0x80: app = "€"; break; sometimes euro symbol is ascii 128, should we suport it?
@@ -99,7 +110,7 @@
case '\u00A0': app = " "; break;
default:
- if (((int)c) >= 0x80)
+ if (encodeNonLatin && ((int)c) >= 0x80)
{
//encode all non basic latin characters
app = "&#" + ((int)c) + ";";
Modified: myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/UnicodeEncoder.java
URL: http://svn.apache.org/viewcvs/myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/UnicodeEncoder.java?rev=227000&r1=226999&r2=227000&view=diff
==============================================================================
--- myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/UnicodeEncoder.java (original)
+++ myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/html/util/UnicodeEncoder.java Tue Aug 2 06:51:55 2005
@@ -19,35 +19,15 @@
/**
- * Converts Strings so that they can be used within HTML-Code.
+ * Converts characters out of latin-1 set in a string to numeric character references.
*/
public abstract class UnicodeEncoder
{
/**
- * Variant of {@link #encode} where encodeNewline is false and encodeNbsp is true.
- */
- public static String encode (String string)
- {
- return encode(string, false, true);
- }
-
- /**
- * Variant of {@link #encode} where encodeNbsp is true.
- */
- public static String encode (String string, boolean encodeNewline)
- {
- return encode(string, encodeNewline, true);
- }
-
- /**
* Encodes the given string, so that it can be used within a html page.
* @param string the string to convert
- * @param encodeNewline if true newline characters are converted to <br>'s
- * @param encodeSubsequentBlanksToNbsp if true subsequent blanks are converted to &nbsp;'s
*/
- public static String encode (String string,
- boolean encodeNewline,
- boolean encodeSubsequentBlanksToNbsp)
+ public static String encode (String string)
{
if (string == null)
{