Приветствую, в связи с тем что php я знаю не гуд, прошу помощь у сообщества. Суть просблемы описана на форуме egroupware. http://forum.egroupware.org/viewtopic.php?t=29438 Кому лень идти по ссылк..... Итак - я смог выяснить, что eGW пытается отослать все символы в пределах [0..31, 160..255] - как числовые XML entities. Но: * Без учета кодировки (и без указания оной в заголовке) * Без учета mbstring Kontact это понимает, но воспринимает переданные entities как unicode. Задача - преобразовывать все символы > 128 в XML-entities в Unicode (USC-2). <code> /usr/share/egroupware/phpgwapi/inc/xml_functions.inc.php: ... function xmlrpc_encode_entitites($data) { $convmap = array(0, 0x1F, 0, 0xFFFF, 0x80, 0xFFFF, 0, 0xFFFF); $incs = $GLOBALS['egw']->translation->system_charset; // input charset $outcs = "UTF-16LE"; // output charset (LE - to prevent BOW) $length = mb_strlen($data, $incs); $escapeddata = ""; for($position = 0; $position < $length; $position++) { $character = mb_substr($data, $position, 1, $incs); $code = Ord($character); if($code < 32) $character = ("&#".strval($code).";"); else if ($code >= 128) # international -> unicode -> digit entity $character = iconv($outcs, "ascii", mb_encode_numericentity(iconv($incs, $outcs, $character), $convmap, $outcs)); $escapeddata .= $character; // special chars (<>&"') already converted in database } return $escapeddata; } </code> Недостатки: * работает очень медленно (идет 4 переконвертирования одной и той же строки) * там какая-то ерунда со спец-символами [<>&"'], не помню уже... На днях буду разворачивать eGW в боевую позицию - продолжу. Достоинства: * работает :-) Примечания: * на Задачах не проверял, но, судя по всему - там конвертирование идет совсем другим путем. А вот как в оригинальном файле xml_functions.inc.php //function xmlrpc_encode_entitites($data) // $length = strlen($data); // $escapeddata = ""; // for($position = 0; $position < $length; $position++) // { // $character = substr($data, $position, 1); // $code = Ord($character); // switch($code) // { // case 34: // $character = """; // break; // case 38: // $character = "&"; // break; // case 39: // $character = "'"; // break; // case 60: // $character = "<"; // break; // case 62: // $character = ">"; // break; // default: // if($code < 32 || $code > 159) // { // $character = //("&#".strval($code).";"); // } // break; // } // $escapeddata .= $character; // } // return $escapeddata; // } Гуру php нужна помощь.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [Си] Как прочитать один Unicode-символ из файла? (2009)
- Форум проблема с кодировкой (2011)
- Форум Кодировки в питоне (2017)
- Форум charset (2004)
- Форум PHP+Oracle (2003)
- Форум PHP+Oracle9 (2003)
- Форум ProFTPd && charset (2005)
- Форум mutt: charsets?! (2000)
- Форум jQuery + PHP, нужна помощь (2016)
- Форум прошу помощи php код (2012)