Escapando caracteres de escape

Estou tentando imitar ojson_encode sinalizadores de máscara de bit implementadas no PHP 5.3.0, aqui está a string que tenho:

$s = addslashes('O\'Rei"lly'); // O\'Rei\"lly

Fazendojson_encode($s, JSON_HEX_APOS | JSON_HEX_QUOT) produz o seguinte:

"O\\\u0027Rei\\\u0022lly"

E atualmente estou fazendo isso em versões PHP anteriores à 5.3.0:

str_replace(array('\\"', "\\'"), array('\\u0022', '\\\u0027'), json_encode($s))
or
str_replace(array('\\"', '\\\''), array('\\u0022', '\\\u0027'), json_encode($s))

Que gera corretamente o mesmo resultado:

"O\\\u0027Rei\\\u0022lly"

Estou tendo problemas para entenderpor que preciso substituir aspas simples ('\\\'' ou mesmo"\\'" [citações circundantes excluídas]) com'\\\u0027' e não apenas'\\u0027'.

Aqui está o código que estou tendo problemas para portar para o PHP <5.3:

if (get_magic_quotes_gpc() && version_compare(PHP_VERSION, '6.0.0', '<'))
{
    /* JSON_HEX_APOS and JSON_HEX_QUOT are availiable */
    if (version_compare(PHP_VERSION, '5.3.0', '>=') === true)
    {
        $_GET = json_encode($_GET, JSON_HEX_APOS | JSON_HEX_QUOT);
        $_POST = json_encode($_POST, JSON_HEX_APOS | JSON_HEX_QUOT);
        $_COOKIE = json_encode($_COOKIE, JSON_HEX_APOS | JSON_HEX_QUOT);
        $_REQUEST = json_encode($_REQUEST, JSON_HEX_APOS | JSON_HEX_QUOT);
    }

    /* mimic the behaviour of JSON_HEX_APOS and JSON_HEX_QUOT */
    else if (extension_loaded('json') === true)
    {
        $_GET = str_replace(array(), array('\\u0022', '\\u0027'), json_encode($_GET));
        $_POST = str_replace(array(), array('\\u0022', '\\u0027'), json_encode($_POST));
        $_COOKIE = str_replace(array(), array('\\u0022', '\\u0027'), json_encode($_COOKIE));
        $_REQUEST = str_replace(array(), array('\\u0022', '\\u0027'), json_encode($_REQUEST));
    }

    $_GET = json_decode(stripslashes($_GET));
    $_POST = json_decode(stripslashes($_POST));
    $_COOKIE = json_decode(stripslashes($_COOKIE));
    $_REQUEST = json_decode(stripslashes($_REQUEST));
}