bi güzellikte ben yapayım. eğer sayfanızın karakter kodlaması utf-8 ise direk olarak karakteri yazıp bunu replace ettiremiyorsunuz. utf-8 sayfalarda şunu kullanmanız gerekiyor.

    /**
    * Converts an NCR to a UTF-8 char
    *
    * @param    int        $cp    UNICODE code point
    * @return    string        UTF-8 char
    */
    function utf8_chr($cp)
    {
        if ($cp > 0xFFFF)
        {
            return chr(0xF0 | ($cp >> 18)) . chr(0x80 | (($cp >> 12) & 0x3F)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F));
        }
        else if ($cp > 0x7FF)
        {
            return chr(0xE0 | ($cp >> 12)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F));
        }
        else if ($cp > 0x7F)
        {
            return chr(0xC0 | ($cp >> 6)) . chr(0x80 | ($cp & 0x3F));
        }
        else
        {
            return chr($cp);
        }
    }

    $seo_opt['url_find'] = array(
        utf8_chr(304), // I
        utf8_chr(305), // ı
        utf8_chr(350), // Ş
        utf8_chr(351), // ş
        utf8_chr(286), // Ğ
        utf8_chr(287), // ğ
        utf8_chr(220), // Ü
        utf8_chr(252), // ü
        utf8_chr(231), // Ç
        utf8_chr(199), // ç
        utf8_chr(214), // Ö
        utf8_chr(246), // ö
    );
    $seo_opt['url_replace'] = array(
        'i', 
        'i',
        's',
        's',
        'g',
        'g',
        'u',
        'u',
        'c',
        'c',
        'o',
        'o',
    );

    $url = str_replace ($seo_opt['url_find'], $seo_opt['url_replace'], $url);