альтернатива для функции preg_replace e/ modifier

Кто-нибудь знает, как изменить эту функцию с помощью preg_replace и модификатора e/. Модификатор e/ будет обесценен.

function charset_decode_utf_8 ($string) {
      /* Only do the slow convert if there are 8-bit characters */
    /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */
    if (! preg_match("/[\200-\237]/", $string) and ! preg_match("/[\241-\377]/", $string))
        return $string;

    // decode three byte unicode characters
    $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",
    "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",
     $string);

    // decode two byte unicode characters
    $string = preg_replace("/([\300-\337])([\200-\277])/e",
    "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
    $string);

return $string;
}

person ceasar    schedule 15.10.2012    source источник
comment
preg_replace_callback   -  person Tim Cooper    schedule 15.10.2012
comment
Также связано с тем, что делает приведенный выше код: символы выше 127 в десятичные числа"> stackoverflow.com/questions/12848091/   -  person DaveRandom    schedule 15.10.2012