diff options
author | thomascube <thomas@roundcube.net> | 2005-09-25 14:18:03 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2005-09-25 14:18:03 +0000 |
commit | 4e17e6c9dbac8991ee8b302cb2581241247dc8bc (patch) | |
tree | d877546f6bd334b041734498e81f6299e005b01c /program/lib/icl_commons.inc |
Initial revision
Diffstat (limited to 'program/lib/icl_commons.inc')
-rw-r--r-- | program/lib/icl_commons.inc | 81 |
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 |