/** * normalize vcard source for parsing * * @param string $vcardStr vcard source string * @return string */ public function normalizeSource($vcardStr) { ArgValidator::assert($vcardStr, 'string'); if (strpos($vcardStr, 'BEGIN:') !== 0) { return ''; } /* convert <U+xxxx> to characters */ if (preg_match_all('/<[uU]\\+([0-9A-Fa-f]{4})>/', $vcardStr, $matches, PREG_SET_ORDER)) { $conversions = array(); foreach ($matches as $match) { $conversions[$match[0]] = Utf8::uchr(hexdec($match[1])); } $vcardStr = strtr($vcardStr, $conversions); } /* strip extra leading spaces */ $vcardStr = preg_replace('/\\n[\\s]+/', "\n ", $vcardStr); return $vcardStr; }
/** * normalize vcard source string after parsing * * @param string $vcardStr vcard source string * @return string */ public function normalizeSource($vcardStr) { ArgValidator::assert($vcardStr, 'string'); /* convert chars outside ASCII range to <U+xxxx> expression */ if (preg_match_all('/[^\\x{0000}-\\x{007F}]/u', $vcardStr, $matches)) { $conversion = array(); foreach (array_unique($matches[0]) as $char) { $conversion[$char] = '<U+' . strtoupper(dechex(Utf8::uord($char))) . '>'; } $vcardStr = strtr($vcardStr, $conversion); } /* workaround to enable comma-separated values */ $vcardStr = strtr($vcardStr, array(self::JOINCHAR => ',')); return $vcardStr; }