summaryrefslogtreecommitdiff
path: root/program/lib/icl_commons.inc
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2005-09-25 14:18:03 +0000
committerthomascube <thomas@roundcube.net>2005-09-25 14:18:03 +0000
commit4e17e6c9dbac8991ee8b302cb2581241247dc8bc (patch)
treed877546f6bd334b041734498e81f6299e005b01c /program/lib/icl_commons.inc
Initial revision
Diffstat (limited to 'program/lib/icl_commons.inc')
-rw-r--r--program/lib/icl_commons.inc81
1 files changed, 81 insertions, 0 deletions
diff --git a/program/lib/icl_commons.inc b/program/lib/icl_commons.inc
new file mode 100644
index 000000000..599205178
--- /dev/null
+++ b/program/lib/icl_commons.inc
@@ -0,0 +1,81 @@
+<?php
+function mod_b64_decode($data){
+ return base64_decode(str_replace(",","/",$data));
+}
+
+function mod_b64_encode($data){
+ return str_replace("/",",",str_replace("=","",base64_encode($data)));
+}
+
+
+function utf8_to_html($str){
+ $len = strlen($str);
+ $out = "";
+ for($i=0;$i<$len;$i+=2){
+ $val = ord($str[$i]);
+ $next_val = ord($str[$i+1]);
+ if ($val<255){
+ $out.="&#".($val*256+$next_val).";";
+ }else{
+ $out.=$str[$i].$str[$i+1];
+ }
+ }
+ return $out;
+}
+
+function iil_utf7_decode($str, $raw=false){
+ if (strpos($str, '&')===false) return $str;
+
+ $len = strlen($str);
+ $in_b64 = false;
+ $b64_data = "";
+ $out = "";
+ for ($i=0;$i<$len;$i++){
+ $char = $str[$i];
+ if ($char=='&') $in_b64 = true;
+ else if ($in_b64 && $char=='-'){
+ $in_b64 = false;
+ if ($b64_data=="") $out.="&";
+ else{
+ $dec=mod_b64_decode($b64_data);
+ $out.=($raw?$dec:utf8_to_html($dec));
+ $b64_data = "";
+ }
+ }else if ($in_b64) $b64_data.=$char;
+ else $out.=$char;
+ }
+ return $out;
+}
+
+function iil_utf7_encode($str){
+ if (!ereg("[\200-\237]",$str) && !ereg("[\241-\377]",$str))
+ return $str;
+
+ $len = strlen($str);
+
+ for ($i=0;$i<$len;$i++){
+ $val = ord($str[$i]);
+ if ($val>=224 && $val<=239){
+ $unicode = ($val-224) * 4096 + (ord($str[$i+1])-128) * 64 + (ord($str[$i+2])-128);
+ $i+=2;
+ $utf_code.=chr((int)($unicode/256)).chr($unicode%256);
+ }else if ($val>=192 && $val<=223){
+ $unicode = ($val-192) * 64 + (ord($str[$i+1])-128);
+ $i++;
+ $utf_code.=chr((int)($unicode/256)).chr($unicode%256);
+ }else{
+ if ($utf_code){
+ $out.='&'.mod_b64_encode($utf_code).'-';
+ $utf_code="";
+ }
+ if ($str[$i]=="-") $out.="&";
+ $out.=$str[$i];
+ }
+ }
+ if ($utf_code)
+ $out.='&'.mod_b64_encode($utf_code).'-';
+ return $out;
+}
+
+
+?> \ No newline at end of file