Hello,
just got an xml-error in with german umlauts and firefox. Firefox says
"not defined entity" (translated from german error message).
So I took a look at files/get_files.php and saw the problem. The
function htmlentities is used to encode special characters, but in xml
these are not specified.
Because owncloud uses utf8 as charset for the html-pages it is not
necessary to escape special characters. This means it would be
enough to escape xml-related characters (|'&', '"', "'", '<', '>','\'',)
for xml attribute values.
In this case the utf8tohtml function would be unnecessary.
Please try the attached patch with german umlauts or other special
characters and compare it with the original version.
Regards, schnere
|
diff --git a/files/get_files.php b/files/get_files.php
index 1481bb6..d3e53e7 100755
--- a/files/get_files.php
+++ b/files/get_files.php
@@ -53,9 +53,8 @@ if(is_array($files)){
foreach($files as $file){
$attributes='';
foreach($file as $name=>$data){
- $data=utf8_encode($data);
- $data=utf8tohtml($data);
- $data=str_replace("'",''',$data);
+ //$data=utf8_encode($data);
+ $data=xmlentities($data);
if (is_string($name)) $attributes.=" $name='$data'";
}
$attributes.=' date=\''.date($CONFIG_DATEFORMAT,$file['mtime']).'\'';
@@ -64,46 +63,10 @@ if(is_array($files)){
}
echo "</dir>";
-// converts a UTF8-string into HTML entities
+// converts a UTF8-string into XML entities
// - $utf8: the UTF8-string to convert
-// - $encodeTags: booloean. TRUE will convert "<" to "<"
-// - return: returns the converted HTML-string
-function utf8tohtml($utf8, $encodeTags=true) {
- $result = '';
- for ($i = 0; $i < strlen($utf8); $i++) {
- $char = $utf8[$i];
- $ascii = ord($char);
- if ($ascii < 128) {
- // one-byte character
- $result .= ($encodeTags) ? htmlentities($char) : $char;
- } else if ($ascii < 192) {
- // non-utf8 character or not a start byte
- } else if ($ascii < 224) {
- // two-byte character
- $result .= htmlentities(substr($utf8, $i, 2), ENT_QUOTES, 'UTF-8');
- $i++;
- } else if ($ascii < 240) {
- // three-byte character
- $ascii1 = ord($utf8[$i+1]);
- $ascii2 = ord($utf8[$i+2]);
- $unicode = (15 & $ascii) * 4096 +
- (63 & $ascii1) * 64 +
- (63 & $ascii2);
- $result .= "&#$unicode;";
- $i += 2;
- } else if ($ascii < 248) {
- // four-byte character
- $ascii1 = ord($utf8[$i+1]);
- $ascii2 = ord($utf8[$i+2]);
- $ascii3 = ord($utf8[$i+3]);
- $unicode = (15 & $ascii) * 262144 +
- (63 & $ascii1) * 4096 +
- (63 & $ascii2) * 64 +
- (63 & $ascii3);
- $result .= "&#$unicode;";
- $i += 3;
- }
- }
- return $result;
-}
+// - return: returns the converted XML-string
+function xmlentities($utf8) {
+ return str_replace ( array ( '&', '"', "'", '<', '>', '\'' ), array ( '&' , '"', ''' , '<' , '>', ''' ), $utf8 );
+}
?>
\ No newline at end of file
_______________________________________________
Owncloud mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/owncloud