Class it:

/**
 * Replace parts of a string matched by a pattern with according replacement string. See convertregex for named parameters.
 * @param $replacementes Array with patterns as keys and replacement strings as values
 * @param $string String to change
 * @param $p['limit'] limit number of replacements (default: all)
 * @return New string
 * @see convertregex for more options in $p
 */
static function replace($replacements, $string, $p = array())
{
    $encoding = ini_get('default_charset') == 'utf-8' ? 'u' : '';
    foreach ($replacements as $pattern => $dummy)
        $patterns[] = !preg_match('/\\\\[wb]|[!\x80-\xff]|\[\[:/i', $pattern) && !$p ? "!$pattern!i$encoding" : it::convertregex($pattern, $p);

    $result = preg_replace((array)$patterns, $replacements, $string, isset($p['limit']) ? $p['limit'] : -1);

     if ($result === null && preg_last_error() == PREG_BAD_UTF8_ERROR)
        it::error("Invalid utf-8 in it::replace haystack: " . substr($string, 0, 500)); # UTF8SAFE

    return $result;
}