aboutsummaryrefslogtreecommitdiffstats
path: root/files/get_files.php
diff options
context:
space:
mode:
Diffstat (limited to 'files/get_files.php')
-rw-r--r--files/get_files.php49
1 files changed, 47 insertions, 2 deletions
diff --git a/files/get_files.php b/files/get_files.php
index 287b8cd453e..21866dbf636 100644
--- a/files/get_files.php
+++ b/files/get_files.php
@@ -47,12 +47,14 @@ $dirname=(isset($files[0]))?$files[0]['directory']:'';
$dirname=substr($dirname,strrpos($dirname,'/'));
$max_upload=min(return_bytes(ini_get('post_max_size')),return_bytes(ini_get('upload_max_filesize')));
ob_clean();
-echo "<?xml version='1.0' standalone='yes'?>\n";
+echo "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n";
echo "<dir name='$dirname' max_upload='$max_upload'>\n";
if(is_array($files)){
foreach($files as $file){
$attributes='';
foreach($file as $name=>$data){
+ $data=utf8_encode($data);
+ $data=utf8tohtml($data);
$data=str_replace("'",'&#39;',$data);
if (is_string($name)) $attributes.=" $name='$data'";
}
@@ -60,5 +62,48 @@ if(is_array($files)){
echo "<file$attributes/>\n";
}
}
-echo "\n</dir>";
+echo "</dir>";
+
+// converts a UTF8-string into HTML entities
+// - $utf8: the UTF8-string to convert
+// - $encodeTags: booloean. TRUE will convert "<" to "&lt;"
+// - 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;
+}
?> \ No newline at end of file