imap_utf7_encode_local.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. function encodeBASE64($s) {
  3. $B64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,';
  4. $p = 0; // phase: 1 / 2 / 3 / 1 / 2 / 3...
  5. $e = ''; // base64-encoded string
  6. //foreach($s as $c) {
  7. for ($i = 0; $i < strlen($s); $i++) {
  8. $c = $s[$i];
  9. if ($p == 0) {
  10. $e = $e . substr($B64Chars, ((ord($c) & 252) >> 2), 1);
  11. $t = (ord($c) & 3);
  12. $p = 1;
  13. } elseif ($p == 1) {
  14. $e = $e . $B64Chars[($t << 4) + ((ord($c) & 240) >> 4)];
  15. $t = (ord($c) & 15);
  16. $p = 2;
  17. } elseif ($p == 2) {
  18. $e = $e . $B64Chars[($t << 2) + ((ord($c) & 192) >> 6)];
  19. $e = $e . $B64Chars[ord($c) & 63];
  20. $p = 0;
  21. }
  22. }
  23. //
  24. // flush buffer
  25. //
  26. if ($p == 1) {
  27. $e = $e . $B64Chars[$t << 4];
  28. } elseif ($p == 2) {
  29. $e = $e . $B64Chars[$t << 2];
  30. }
  31. return $e;
  32. }
  33. function imap_utf7_encode_local($s) {
  34. $b64_s = ''; // buffer for substring to be base64-encoded
  35. $utf7_s = ''; // imap-utf7-encoded string
  36. for ($i = 0; $i < strlen($s); $i++) {
  37. $c = $s[$i];
  38. $ord_c = ord($c);
  39. if ((($ord_c >= 0x20) and ($ord_c <= 0x25)) or
  40. (($ord_c >= 0x27) and ($ord_c <= 0x7e))) {
  41. if ($b64_s) {
  42. $utf7_s = $utf7_s . '&' . encodeBASE64($b64_s) .'-';
  43. $b64_s = '';
  44. }
  45. $utf7_s = $utf7_s . $c;
  46. } elseif ($ord_c == 0x26) {
  47. if ($b64_s) {
  48. $utf7_s = $utf7_s . '&' . encodeBASE64($b64_s) . '-';
  49. $b64_s = '';
  50. }
  51. $utf7_s = $utf7_s . '&-';
  52. } else {
  53. $b64_s = $b64_s . chr(0) . $c;
  54. }
  55. }
  56. //
  57. // flush buffer
  58. //
  59. if ($b64_s) {
  60. $utf7_s = $utf7_s . '&' . encodeBASE64($b64_s) . '-';
  61. $b64_s = '';
  62. }
  63. return $utf7_s;
  64. }
  65. ?>