Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.
if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
char *decoded;
int decoded_len;
decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
stack->varname = decoded;
break;
}
Соответственно, когда PHP получает из Perl нормальный UTF-8, он его пытается рассмотреть как UTF-8, который надо превратить в ISO-8859-1, на выходе мы получаем вопросы. Чтобы этого не происходило перед wddx_deserialize надо сделать iconv('iso-8859-1', 'utf-8', $string), что решает проблему.// Cyrus IMAP modified UTF-7 decode
function decodeCyrus($str)
{
return preg_replace_callback('!&([a-z0-9+/=,]*)-!is', 'decodeCyrusHelper', $str);
}
function decodeCyrusHelper($m)
{
if ($m[1] == '') return '&';
return iconv('ucs-2be', 'utf-8', str_replace(',', '/', base64_decode($m[1])));
}
Способ использования: $decoded = decodeCyrus('folder.BC8EPQQ0BDUEOgRBBDAALQRBBDUEOgRABDUEQg-')