diff options
author | thomascube <thomas@roundcube.net> | 2011-04-15 15:26:16 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2011-04-15 15:26:16 +0000 |
commit | 569f8306db3f61831795f15793b1c8f749f94779 (patch) | |
tree | 1fa4d63fd5c189453e1ddae45db22adae843d753 /program/include/rcube_vcard.php | |
parent | 5c4c06665c23d9b8fe3d6a47e15d0b3f6daee368 (diff) |
Fix vcard folding at 75 chars; don't fold vcards for internal storage
Diffstat (limited to 'program/include/rcube_vcard.php')
-rw-r--r-- | program/include/rcube_vcard.php | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/program/include/rcube_vcard.php b/program/include/rcube_vcard.php index 086313cc1..fbe0783f1 100644 --- a/program/include/rcube_vcard.php +++ b/program/include/rcube_vcard.php @@ -206,9 +206,10 @@ class rcube_vcard /** * Convert the data structure into a vcard 3.0 string */ - public function export() + public function export($folded = true) { - return self::rfc2425_fold(self::vcard_encode($this->raw)); + $vcard = self::vcard_encode($this->raw); + return $folded ? self::rfc2425_fold($vcard) : $vcard; } @@ -465,18 +466,13 @@ class rcube_vcard private static function rfc2425_fold_callback($matches) { - // use mb string function if available - if (function_exists('mb_ereg_replace')) { - return ":\n " . mb_ereg_replace('(.{70})', "\\1\n ", $matches[1]); - } - // chunk_split string and avoid lines breaking multibyte characters - $c = 66; - $out = ":\n " . substr($matches[1], 0, $c); + $c = 71; + $out .= substr($matches[1], 0, $c); for ($n = $c; $c < strlen($matches[1]); $c++) { - // break if length > 70 or mutlibyte character starts after position 66 - if ($n > 70 || ($n > 66 && ord($matches[1][$c]) >> 6 == 3)) { - $out .= "\n "; + // break if length > 75 or mutlibyte character starts after position 71 + if ($n > 75 || ($n > 71 && ord($matches[1][$c]) >> 6 == 3)) { + $out .= "\n "; $n = 0; } $out .= $matches[1][$c]; @@ -486,9 +482,9 @@ class rcube_vcard return $out; } - private static function rfc2425_fold($val) + public static function rfc2425_fold($val) { - return preg_replace_callback('/:([^\n]{72,})/', array('self', 'rfc2425_fold_callback'), $val) . "\n"; + return preg_replace_callback('/([^\n]{72,})/', array('self', 'rfc2425_fold_callback'), $val); } |