mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
. Fix to server-side WebDav URL encoding (was not encoding to UTF-8 url format)
. Fix to server-side WebDav HTML page link encoding (was not encoding names of items in HTML format inside HREFs) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2088 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -25,6 +25,7 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
@@ -405,28 +406,37 @@ public class WebDAV
|
||||
String servletPath = request.getServletPath();
|
||||
|
||||
int rootPos = urlStr.indexOf(servletPath);
|
||||
if ( rootPos != -1)
|
||||
urlStr.setLength(rootPos + servletPath.length());
|
||||
|
||||
if ( urlStr.charAt(urlStr.length() - 1) != PathSeperatorChar)
|
||||
urlStr.append(PathSeperator);
|
||||
|
||||
if ( path.equals(RootPath) == false)
|
||||
if (rootPos != -1)
|
||||
{
|
||||
if ( path.startsWith(PathSeperator))
|
||||
urlStr.append(path.substring(1));
|
||||
else
|
||||
urlStr.append(path);
|
||||
urlStr.setLength(rootPos + servletPath.length());
|
||||
}
|
||||
|
||||
if (urlStr.charAt(urlStr.length() - 1) != PathSeperatorChar)
|
||||
{
|
||||
urlStr.append(PathSeperator);
|
||||
}
|
||||
|
||||
if (path.equals(RootPath) == false)
|
||||
{
|
||||
// split the path and URL encode each path element
|
||||
for (StringTokenizer t = new StringTokenizer(path, PathSeperator); t.hasMoreTokens(); /**/)
|
||||
{
|
||||
urlStr.append( WebDAVHelper.encodeURL(t.nextToken()) );
|
||||
if (t.hasMoreTokens())
|
||||
{
|
||||
urlStr.append(PathSeperator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the URL is to a collection add a trailing slash
|
||||
|
||||
if ( isCollection && urlStr.charAt( urlStr.length() - 1) != PathSeperatorChar)
|
||||
if (isCollection && urlStr.charAt( urlStr.length() - 1) != PathSeperatorChar)
|
||||
{
|
||||
urlStr.append( PathSeperator);
|
||||
|
||||
// Return the encoded URL string
|
||||
|
||||
return encodeURL( urlStr.toString());
|
||||
}
|
||||
|
||||
// Return the URL string
|
||||
return urlStr.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -507,86 +517,6 @@ public class WebDAV
|
||||
return strNormalized;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes the given URL string
|
||||
*
|
||||
* @param string the String to convert
|
||||
*/
|
||||
public static String encodeURL(String string)
|
||||
{
|
||||
if (string == null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
StringBuilder sb = null; //create on demand
|
||||
String enc;
|
||||
char c;
|
||||
for (int i = 0; i < string.length(); i++)
|
||||
{
|
||||
enc = null;
|
||||
c = string.charAt(i);
|
||||
switch (c)
|
||||
{
|
||||
case '"': enc = """; break; //"
|
||||
case '&': enc = "&"; break; //&
|
||||
case '<': enc = "<"; break; //<
|
||||
case '>': enc = ">"; break; //>
|
||||
|
||||
//german umlauts
|
||||
case '\u00E4' : enc = "ä"; break;
|
||||
case '\u00C4' : enc = "Ä"; break;
|
||||
case '\u00F6' : enc = "ö"; break;
|
||||
case '\u00D6' : enc = "Ö"; break;
|
||||
case '\u00FC' : enc = "ü"; break;
|
||||
case '\u00DC' : enc = "Ü"; break;
|
||||
case '\u00DF' : enc = "ß"; break;
|
||||
|
||||
//misc
|
||||
//case 0x80: enc = "€"; break; sometimes euro symbol is ascii 128, should we suport it?
|
||||
case '\u20AC': enc = "€"; break;
|
||||
case '\u00AB': enc = "«"; break;
|
||||
case '\u00BB': enc = "»"; break;
|
||||
case '\u00A0': enc = " "; break;
|
||||
|
||||
default:
|
||||
if (((int)c) >= 0x80)
|
||||
{
|
||||
//encode all non basic latin characters
|
||||
enc = "&#" + ((int)c) + ";";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (enc != null)
|
||||
{
|
||||
if (sb == null)
|
||||
{
|
||||
String soFar = string.substring(0, i);
|
||||
sb = new StringBuilder(i + 8);
|
||||
sb.append(soFar);
|
||||
}
|
||||
sb.append(enc);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sb != null)
|
||||
{
|
||||
sb.append(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sb == null)
|
||||
{
|
||||
return string;
|
||||
}
|
||||
else
|
||||
{
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a unique lock token
|
||||
*
|
||||
|
Reference in New Issue
Block a user