Local'e iconv desteği var ama yazdığım kişinin hostundaki PHP'de iconv desteği yok. Şu an bu yazdığından daha etkili çözümler aramak peşindeyim. Mesela bir tane buldum PHP Manuel geliştirici notlarında:
function str_encode ($string,$to="iso-8859-9",$from="utf8") {
   if($to=="iso-8859-9" && $from=="utf8"){
       $str_array = array(
       chr(196).chr(177) => chr(253),
       chr(196).chr(176) => chr(221),
       chr(195).chr(182) => chr(246),
       chr(195).chr(150) => chr(214),
       chr(195).chr(167) => chr(231),
       chr(195).chr(135) => chr(199),
       chr(197).chr(159) => chr(254),
       chr(197).chr(158) => chr(222),
       chr(196).chr(159) => chr(240),
       chr(196).chr(158) => chr(208),
       chr(195).chr(188) => chr(252),
       chr(195).chr(156) => chr(220)
       );
       return str_replace(array_keys($str_array), array_values($str_array), $string);

   }
   return $string;
}
Pek farkı yok aslında senin önerdiğinden, bunda da bazı karakterler sorunlu. Başka bir daha buldum onu şimdi deniyorum, hem sadece Türkçe için değil diğer diller için de desteği var. Fonksiyon utf-8'den Unicod'a dönüşüm yapıyor.
function utf2html ($utf2html_string)
{
  $utf2html_retstr = "";
  for ($utf2html_p=0; $utf2html_p<strlen($utf2html_string); $utf2html_p++):
   $utf2html_c = substr ($utf2html_string, $utf2html_p, 1);
   $utf2html_c1 = ord ($utf2html_c);
   if ($utf2html_c1>>5 == 6): // 110x xxxx, 110 prefix for 2 bytes unicode
     $utf2html_p++;
       $utf2html_t = substr ($utf2html_string, $utf2html_p, 1);
     $utf2html_c2 = ord ($utf2html_t);
     $utf2html_c1 &= 31; // remove the 3 bit two bytes prefix
     $utf2html_c2 &= 63; // remove the 2 bit trailing byte prefix
     $utf2html_c2 |= (($utf2html_c1 & 3) << 6); // last 2 bits of c1 become first 2 of c2
     $utf2html_c1 >>= 2; // c1 shifts 2 to the right
       $utf2html_n = dechex($utf2html_c1).dechex($utf2html_c2);
     $utf2html_retstr .= sprintf ("&#%03d;", hexdec($utf2html_n));
   else:
     $utf2html_retstr .= $utf2html_c;
   endif;
  endfor;
  return $utf2html_retstr;
}
PHP: utf8_decode - Manual konuyla ilgili bayağı kod var, aynı şekilde utf8_encode başlığında da. Bizim Türklerin konuyla bayağı ilgili olması orada da gözlerden kaçmıyor.