URI Encoding"

This website contains links to software which is either no longer maintained or will be supported only until the end of 2019 (CKFinder 2). For the latest documentation about current CKSource projects, including software like CKEditor 4/CKEditor 5, CKFinder 3, Cloud Services, Letters, Accessibility Checker, please visit the new documentation website.

If you look for an information about very old versions of CKEditor, FCKeditor and CKFinder check also the CKEditor forum, which was closed in 2015. If not, please head to StackOverflow for support.

 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
By default some servers use the ISO-8859-1 encoding for request parameters and request body. What is more, changing the encoding for request body on such servers has no influence on the encoding of the request parameters. This may cause problems if you want to use international file names with '''CKFinder which expects request body and parameters to be encoded in UTF-8'''.  To overcome this issue you can either set UTF-8 URI encoding on the server or if you do not have enough privileges to do that, you can adjust CKFinder to use same URI encoding as your server. <br />
 
By default some servers use the ISO-8859-1 encoding for request parameters and request body. What is more, changing the encoding for request body on such servers has no influence on the encoding of the request parameters. This may cause problems if you want to use international file names with '''CKFinder which expects request body and parameters to be encoded in UTF-8'''.  To overcome this issue you can either set UTF-8 URI encoding on the server or if you do not have enough privileges to do that, you can adjust CKFinder to use same URI encoding as your server. <br />
 
You will find more detailed instructions below.
 
You will find more detailed instructions below.
 
===JBOSS 7===
 
By default this server uses ISO-8859-1 for parameter encoding. To change this to UTF-8, you have to modify the configuration file appropriate for the mode and configuration used.<br />
 
As you probably know, JBOSS 7 can run in two modes ("domain" and "standalone") and can use various configurations.
 
To simplify the example let us assume that the server uses the standalone mode and default configuration. In order to set UTF-8 for URI encoding you have to edit the <code><nowiki>JBOSS_HOME/standalone/configuration/standalone.xml</nowiki></code> file and add a system property named <code>org.apache.catalina.connector.URI_ENCODING</code>,(with value set to UTF-8) to the <code>system-properties</code> element. <br />
 
Below is the code that needs to be added to the configuration file you use:
 
 
<source lang="xml">
 
<system-properties>
 
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
 
</system-properties>
 
</source>
 
  
 
===GlassFish 3.0===
 
===GlassFish 3.0===
Line 40: Line 28:
  
 
===Tomcat===
 
===Tomcat===
According to [http://wiki.apache.org/tomcat/FAQ/CharacterEncoding Tomcat FAQ], for handling HTTP requests by default Tomcat uses  the ISO-8859-1 encoding.
+
According to [http://wiki.apache.org/tomcat/FAQ/CharacterEncoding Tomcat FAQ], Tomcat 5-7 by default use the ISO-8859-1 encoding for handling HTTP request parameters.
  
 
Starting with version 5 for all <code>GET</code> requests, when the encoding type used is different from the default one, the query parameters are not encoded in the same way as the request body. To be more specific, if you want to use the encoding other than the default ISO-8859-1 (like UTF-8, for example), the <code>HttpServletRequest.setCharacterEncoding("UTF-8")</code> method will only be applied to the request body, and not the URI.
 
Starting with version 5 for all <code>GET</code> requests, when the encoding type used is different from the default one, the query parameters are not encoded in the same way as the request body. To be more specific, if you want to use the encoding other than the default ISO-8859-1 (like UTF-8, for example), the <code>HttpServletRequest.setCharacterEncoding("UTF-8")</code> method will only be applied to the request body, and not the URI.
Line 48: Line 36:
 
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8" />
 
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8" />
 
</source>
 
</source>
 +
 +
In Tomcat 8 the default value of <code>URIEncoding</code> attribute depends on <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> [https://tomcat.apache.org/tomcat-8.0-doc/config/systemprops.html#Specifications system property]. When "strict servlet compliance" is off (default value), <code>URIEncoding</code> is now UTF-8. If "strict servlet compliance" is enabled, the <code>URIEncoding</code> is ISO-8859-1.<br />
 +
In other words, the <code>URIEncoding</code> in Tomcat 8+ is now optional but if you are getting encoding problems (e.g. because <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> was enabled) you can set this attribute explicitly to UTF-8 in the <code>Connector</code> element.
 +
 +
===JBOSS EAP 6===
 +
By default this server uses ISO-8859-1 for parameter encoding. To change this to UTF-8, you have to modify the configuration file appropriate for the mode and configuration used.<br />
 +
As you probably know, JBOSS EAP can run in two modes ("domain" and "standalone") and can use various configurations.
 +
To simplify the example let us assume that the server uses the standalone mode and default configuration. In order to set UTF-8 for URI encoding you have to edit the <code><nowiki>JBOSS_HOME/standalone/configuration/standalone.xml</nowiki></code> file and add a system property named <code>org.apache.catalina.connector.URI_ENCODING</code>,(with value set to UTF-8) to the <code>system-properties</code> element. <br />
 +
Below is the code that needs to be added to the configuration file you use:
 +
 +
<source lang="xml">
 +
<system-properties>
 +
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
 +
</system-properties>
 +
</source>
 +
Please note that the <code>system-properties</code> node has to be placed directly under the <code>extensions</code> node, in standalone.xml file, or you will get parse errors.
 +
 +
===WildFly===
 +
The WildFly belongs to the group of servers which use UTF-8 encoding for handling request parameters. Configuration setting responsible for the encoding is [https://docs.jboss.org/author/display/WFLY9/Undertow+%28web%29+subsystem+configuration#Undertow%28web%29subsystemconfiguration-Commonsettings url-charset]. In order to use international file names in CKFinder, one must leave <code>url-charset</code> setting with its default value and use [http://docs.oracle.com/javaee/7/api/javax/servlet/ServletRequest.html#setCharacterEncoding%28java.lang.String%29 setCharacterEncoding("UTF-8");] for requests and [http://docs.oracle.com/javaee/7/api/javax/servlet/ServletResponse.html#setCharacterEncoding%28java.lang.String%29 setCharacterEncoding("UTF-8");] or [http://docs.oracle.com/javaee/7/api/javax/servlet/ServletResponse.html#setContentType%28java.lang.String%29 setContentType("UTF-8");] for responses in the application. CKFinder is using the mentioned methods however since request parameters sent in the request body (occurs with an HTTP POST request) are parsed only once, it is very important that proper encoding is set as early as possible (best in a filter), before any reading of the parameters is performed.
  
 
===Weblogic===
 
===Weblogic===

Latest revision as of 23:51, 19 November 2015

By default some servers use the ISO-8859-1 encoding for request parameters and request body. What is more, changing the encoding for request body on such servers has no influence on the encoding of the request parameters. This may cause problems if you want to use international file names with CKFinder which expects request body and parameters to be encoded in UTF-8. To overcome this issue you can either set UTF-8 URI encoding on the server or if you do not have enough privileges to do that, you can adjust CKFinder to use same URI encoding as your server.
You will find more detailed instructions below.

GlassFish 3.0

According to Glassfish 3.0 documentation default parameter encoding for requests is ISO-8859-1. To change this encoding to UTF-8 you have to use the sun-web.xml file with xml parameter-encoding element. This file has to be placed in the WEB-INF folder of your web application.
CKFinder sample web application comes with such a file. If you are using Glassfish 3.0, want to use UTF-8, and to integrate CKFinder in to your application then apart from files mentioned in the Integration section, copy sun-web.xml as well.
Below is the code for the sun-web.xml file:

<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD GlassFish Application Server 3.0 Servlet 3.0//EN"
 "http://www.sun.com/software/appserver/dtds/sun-web-app_3_0-0.dtd">
<sun-web-app>
	<parameter-encoding default-charset="UTF-8" />
</sun-web-app>

GlassFish 3.1+

By default this server uses ISO-8859-1 for parameter encoding. In order to change this to UTF-8, you have to use the glassfish-web.xml file with xml parameter-encoding element. This file has to be placed in the WEB-INF folder of the web application.
CKFinder sample web application comes with such a file. If you are using Glassfish 3.1 or above, want to use UTF-8, and to integrate CKFinder in to your application then apart from files mentioned in the Integration section, copy glassfish-web.xml as well.
Below is the code for the glassfish-web.xml file:

<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" 
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8" />
</glassfish-web-app>

Tomcat

According to Tomcat FAQ, Tomcat 5-7 by default use the ISO-8859-1 encoding for handling HTTP request parameters.

Starting with version 5 for all GET requests, when the encoding type used is different from the default one, the query parameters are not encoded in the same way as the request body. To be more specific, if you want to use the encoding other than the default ISO-8859-1 (like UTF-8, for example), the HttpServletRequest.setCharacterEncoding("UTF-8") method will only be applied to the request body, and not the URI.

In order to encode the query parameters just like the requests, you should use the URIEncoding="UTF-8" attribute in the Connector element of the Server.xml file:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8" />

In Tomcat 8 the default value of URIEncoding attribute depends on org.apache.catalina.STRICT_SERVLET_COMPLIANCE system property. When "strict servlet compliance" is off (default value), URIEncoding is now UTF-8. If "strict servlet compliance" is enabled, the URIEncoding is ISO-8859-1.
In other words, the URIEncoding in Tomcat 8+ is now optional but if you are getting encoding problems (e.g. because org.apache.catalina.STRICT_SERVLET_COMPLIANCE was enabled) you can set this attribute explicitly to UTF-8 in the Connector element.

JBOSS EAP 6

By default this server uses ISO-8859-1 for parameter encoding. To change this to UTF-8, you have to modify the configuration file appropriate for the mode and configuration used.
As you probably know, JBOSS EAP can run in two modes ("domain" and "standalone") and can use various configurations. To simplify the example let us assume that the server uses the standalone mode and default configuration. In order to set UTF-8 for URI encoding you have to edit the JBOSS_HOME/standalone/configuration/standalone.xml file and add a system property named org.apache.catalina.connector.URI_ENCODING,(with value set to UTF-8) to the system-properties element.
Below is the code that needs to be added to the configuration file you use:

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
</system-properties>

Please note that the system-properties node has to be placed directly under the extensions node, in standalone.xml file, or you will get parse errors.

WildFly

The WildFly belongs to the group of servers which use UTF-8 encoding for handling request parameters. Configuration setting responsible for the encoding is url-charset. In order to use international file names in CKFinder, one must leave url-charset setting with its default value and use setCharacterEncoding("UTF-8"); for requests and setCharacterEncoding("UTF-8"); or setContentType("UTF-8"); for responses in the application. CKFinder is using the mentioned methods however since request parameters sent in the request body (occurs with an HTTP POST request) are parsed only once, it is very important that proper encoding is set as early as possible (best in a filter), before any reading of the parameters is performed.

Weblogic

This server follows J2EE specification when it comes to encoding. This means that if no encoding is specified then default ISO-8859-1 is set for everything (Servlets, JSP, Tag Files) except for XML format files.
Weblogic documentation provides a couple of ways for setting the encoding you want (UTF-8 in this case). There are server typical methods as well as general Servlet API methods. It seems the best way to set encoding in the WLS server is using setCharacterEncoding("UTF-8"); for requests and setCharacterEncoding("UTF-8"); or setContentType("UTF-8"); for responses.

Please see this link (Web Components section) for more details on setting appropriate encoding on the server-side.

Jetty

The Jetty server uses UTF-8 by default. Jetty documentation states if no overriding character encoding is set on a request, Jetty uses UTF-8 encoding.

Alternative Solution (CKFinder Adjustment)

By default, CKFinder uses the UTF-8 encoding, so you should stick to the guidelines presented above in order to make it work properly.

If you cannot or do not want to set this parameter in the server configuration file, CKFinder will try to address this problem for you. This is why the uriEncoding configuration element was created in the config.xml<code> file. This parameter accepts the encoding of your query parameters.
For example, for Tomcat, JBoss, Glassfish, and Weblogic with their default configuration set (which is ISO-8859-1) you should set uriEncoding to ISO-8859-1 and CKFinder will convert the query parameters for you.

<uriEncoding>ISO-8859-1</uriEncoding>
This page was last edited on 19 November 2015, at 23:51.