<?php

function unicode_urldecode($url, $encoding = "")
{
    if ($encoding == '')
    {
	if (isset($_SERVER['HTTP_ACCEPT_CHARSET']))
	{
	    preg_match('/^\s*([-\w]+?)([,;\s]|$)/', $_SERVER['HTTP_ACCEPT_CHARSET'], $a);
	    $encoding = strtoupper($a[1]);
	}
	else
	{
	    $encoding = 'KOI8-R'; // default
	}
    }

    preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);
    foreach ($a[1] as $uniord)
    {
	$dec = hexdec($uniord);
	$utf = '';

	if ($dec < 128)
	{
	    $utf = chr($dec);
	}
	else if ($dec < 2048)
	{
	    $utf = chr(192 + (($dec - ($dec % 64)) / 64));
	    $utf .= chr(128 + ($dec % 64));
	}
	else
	{
	    $utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
	    $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
	    $utf .= chr(128 + ($dec % 64));
	}

	$utf = iconv("UTF-8", "$encoding//IGNORE", $utf);
	$url = str_replace('%u'.$uniord, $utf, $url);
    }

    return urldecode($url);
}

?>