$str=iconv("UCS-2", "UTF-8", $str);
function ucs2_to_utf8($s, $type = 'BE', $to_array = false) { static $types = array( 'BE' => 'n', #unsigned short (always 16 bit, big endian byte order) 'LE' => 'v', #unsigned short (always 16 bit, little endian byte order) ); if (! array_key_exists($type, $types)) { trigger_error('Unexpected value in second parameter, "' . $type . '" given!', E_USER_WARNING); return false; } $a = array(); foreach (unpack($types[$type] . '*', $s) as $c) { if ($c < 0x80) $a[] = chr($c); elseif ($c < 0x800) $a[] = chr(0xC0 ($c >> 6)) . chr(0x80 ($c & 0x3F)); else $a[] = chr(0xE0 ($c >> 12)) . chr(0x80 (0x3F & ($c >> 6))) . chr(0x80 ($c & 0x3F)); } return $to_array ? $a : implode('', $a); }