@@ 349-389 (lines=41) @@ | ||
346 | * @param string $encoding Encoding of output string. |
|
347 | * @return string |
|
348 | */ |
|
349 | function Rfc2047Decode($str, $encoding = 'utf-8') |
|
350 | { |
|
351 | // Find string encoding |
|
352 | $ar = array(); |
|
353 | //preg_match_all('/=\?(.{3,13})\?[B|Q]\?([\/\d\w\=]*)\?\=/i', $str, $ar); |
|
354 | preg_match_all('/=\?(.{3,13})\?([B|Q])\?([^\?]*)\?\=/i', $str, $ar); |
|
355 | // 0 is all-string pattern, 1 is encoding, 2 is string to base64_decode |
|
356 | $i = count($ar[0]); |
|
357 | //var_dump($ar); |
|
358 | if (0 < $i) |
|
359 | { |
|
360 | // Got match, process |
|
361 | for ($j = 0; $j < count($i); $j++) |
|
362 | { |
|
363 | $s = ''; |
|
364 | if ('B' == strtoupper($ar[2][$j])) { |
|
365 | // Decode base64 first |
|
366 | $s = base64_decode($ar[3][$j]); |
|
367 | } |
|
368 | elseif ('Q' == strtoupper($ar[2][$j])) { |
|
369 | // quoted-printable encoding ? its format like '=0D=0A' |
|
370 | $s = quoted_printable_decode($ar[3][$j]); |
|
371 | } |
|
372 | ||
373 | // Then convert string to charset ordered |
|
374 | if ($encoding != strtolower($ar[1][$j])) |
|
375 | $s = mb_convert_encoding($s, $encoding, $ar[1][$j]); |
|
376 | ||
377 | // Then replace into original string |
|
378 | if (!empty($s)) |
|
379 | $str = str_replace($ar[0][$j], $s, $str); |
|
380 | } |
|
381 | //echo "$str \n"; |
|
382 | return $str; |
|
383 | } |
|
384 | else |
|
385 | { |
|
386 | // No match, return original string |
|
387 | return $str; |
|
388 | } |
|
389 | } |
|
390 | ||
391 | ||
392 | /** |
@@ 25-59 (lines=35) @@ | ||
22 | * @param string $encoding |
|
23 | * @return string |
|
24 | */ |
|
25 | public function decode($str, $encoding = 'utf-8') |
|
26 | { |
|
27 | // Find string encoding |
|
28 | $ar = []; |
|
29 | preg_match_all('/=\?(.{3,13})\?([B|Q])\?([^\?]*)\?\=/i', $str, $ar); |
|
30 | // 0 is all-string pattern, 1 is encoding, 2 is string to base64_decode |
|
31 | $i = count($ar[0]); |
|
32 | if (0 < $i) { |
|
33 | // Got match, process |
|
34 | for ($j = 0; $j < count($i); $j++) { |
|
35 | $s = ''; |
|
36 | if ('B' == strtoupper($ar[2][$j])) { |
|
37 | // Decode base64 first |
|
38 | $s = base64_decode($ar[3][$j]); |
|
39 | } elseif ('Q' == strtoupper($ar[2][$j])) { |
|
40 | // quoted-printable encoding ? its format like '=0D=0A' |
|
41 | $s = quoted_printable_decode($ar[3][$j]); |
|
42 | } |
|
43 | ||
44 | // Then convert string to charset ordered |
|
45 | if ($encoding != strtolower($ar[1][$j])) { |
|
46 | $s = mb_convert_encoding($s, $encoding, $ar[1][$j]); |
|
47 | } |
|
48 | ||
49 | // Then replace into original string |
|
50 | if (!empty($s)) { |
|
51 | $str = str_replace($ar[0][$j], $s, $str); |
|
52 | } |
|
53 | } |
|
54 | return $str; |
|
55 | } else { |
|
56 | // No match, return original string |
|
57 | return $str; |
|
58 | } |
|
59 | } |
|
60 | ||
61 | ||
62 | /** |