imap_utf7_decode_local.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. function decodeBASE64($s) {
  3. $B64Values = array(
  4. "A" => 0, "B" => 1, "C" => 2, "D" => 3, "E" => 4, "F" => 5,
  5. "G" => 6, "H" => 7, "I" => 8, "J" => 9, "K" => 10, "L" => 11,
  6. "M" => 12, "N" => 13, "O" => 14, "P" => 15, "Q" => 16, "R" => 17,
  7. "S" => 18, "T" => 19, "U" => 20, "V" => 21, "W" => 22, "X" => 23,
  8. "Y" => 24, "Z" => 25,
  9. "a" => 26, "b" => 27, "c" => 28, "d" => 29, "e" => 30, "f" => 31,
  10. "g" => 32, "h" => 33, "i" => 34, "j" => 35, "k" => 36, "l" => 37,
  11. "m" => 38, "n" => 39, "o" => 40, "p" => 41, "q" => 42, "r" => 43,
  12. "s" => 44, "t" => 45, "u" => 46, "v" => 47, "w" => 48, "x" => 49,
  13. "y" => 50, "z" => 51,
  14. "0" => 52, "1" => 53, "2" => 54, "3" => 55, "4" => 56, "5" => 57,
  15. "6" => 58, "7" => 59, "8" => 60, "9" => 61, "+" => 62, "," => 63
  16. );
  17. $p = 0;
  18. $d = '';
  19. $unicodeNullByteToggle = 0;
  20. for ($i = 0; $i < strlen($s); $i++) {
  21. $c = $s[$i];
  22. if ($p == 0) {
  23. $t = $B64Values[$c];
  24. $p = 1;
  25. } elseif ($p == 1) {
  26. if ($unicodeNullByteToggle) {
  27. $d = $d . chr(($t << 2) + (($B64Values[$c] & 48) >> 4));
  28. $unicodeNullByteToggle = 0;
  29. } else {
  30. $unicodeNullByteToggle = 1;
  31. }
  32. $t = ($B64Values[$c] & 15);
  33. $p = 2;
  34. } elseif ($p == 2) {
  35. if ($unicodeNullByteToggle) {
  36. $d = $d . chr(($t << 4) + (($B64Values[$c] & 60) >> 2));
  37. $unicodeNullByteToggle = 0;
  38. } else {
  39. $unicodeNullByteToggle = 1;
  40. }
  41. $t = ($B64Values[$c] & 3);
  42. $p = 3;
  43. } elseif ($p == 3) {
  44. if ($unicodeNullByteToggle) {
  45. $d = $d . chr(($t << 6) + $B64Values[$c]);
  46. $unicodeNullByteToggle = 0;
  47. } else {
  48. $unicodeNullByteToggle = 1;
  49. }
  50. $t = ($B64Values[$c] & 3);
  51. $p = 0;
  52. }
  53. }
  54. return $d;
  55. }
  56. function imap_utf7_decode_local($s) {
  57. $b64_s = '';
  58. $iso_8859_1_s = '';
  59. for ($i = 0; $i < strlen($s); $i++) {
  60. $c = $s[$i];
  61. if (strlen($b64_s) > 0) {
  62. if ($c == '-') {
  63. if ($b64_s == '&') {
  64. $iso_8859_1_s = $iso_8859_1_s . '&';
  65. } else {
  66. $iso_8859_1_s = $iso_8859_1_s .
  67. decodeBASE64(substr($b64_s, 1));
  68. }
  69. $b64_s = '';
  70. } else {
  71. $b64_s = $b64_s . $c;
  72. }
  73. } else {
  74. if ($c == '&') {
  75. $b64_s = '&';
  76. } else {
  77. $iso_8859_1_s = $iso_8859_1_s . $c;
  78. }
  79. }
  80. }
  81. return $iso_8859_1_s;
  82. }
  83. ?>