if($_POST["w"])
{
//(1)
echo md5("日本語")."<br>";

$PostData = $_POST["w"];

//(2)
echo "[".$PostData."] -> ";
echo md5($PostData)."<br><br>";

//(3)
$UrldecodedPostData = urldecode($PostData);
echo "[".$UrldecodedPostData."] -> ";
echo md5($UrldecodedPostData)."<br><br>";
}

echo <<<__EOF__
<form action="md5test.php" method="post">
<input type="input" name="w" size="40">
<input type="submit">
</form>
__EOF__;

というスクリプトを書いたら、(2)と(3)のどちらも(1)と同じにならず困ってます。ちなみに、(2)=(3)でした。
POSTまたはGETで渡された文字列(日本語含む)のMD5値を、(1)のように直接関数に入れたMD5値と同じにしたいのですが
それにはどうしたらいいんでしょうか?
環境はPHP 5.0.4です。