Problema con preg_match() validando a utf8

Si necesitaramos comprobar si una cadena esta en formato utf8, en PHP necesitaríamos una función especifica del tipo is_utf8($str). La función necesaria es la siguiente.

<?php
	define('_is_utf8_split', 255);

	/**
	 * Check if a string is encode in UTF-8
	 * @param string $string String to check
	 */
	function is_utf8($string)
	{
		if (strlen($string) > _is_utf8_split)
		{
			// Based on: http://mobile-website.mobi/php-utf8-vs-iso-8859-1-59
			for ($i = 0, $s = _is_utf8_split, $j = ceil(strlen($string) / _is_utf8_split); $i < $j; $i++, $s += _is_utf8_split)
			{
				if (is_utf8(substr($string, $s, _is_utf8_split)))
					return true;
			}
			return false;
		}
		else
		{
			// From http://w3.org/International/questions/qa-forms-utf-8.html
			return preg_match('%^(?:
					&#91;x09x0Ax0Dx20-x7E&#93;            # ASCII
				| &#91;xC2-xDF&#93;&#91;x80-xBF&#93;             # non-overlong 2-byte
				|  xE0&#91;xA0-xBF&#93;&#91;x80-xBF&#93;        # excluding overlongs
				| &#91;xE1-xECxEExEF&#93;&#91;x80-xBF&#93;{2}  # straight 3-byte
				|  xED&#91;x80-x9F&#93;&#91;x80-xBF&#93;        # excluding surrogates
				|  xF0&#91;x90-xBF&#93;&#91;x80-xBF&#93;{2}     # planes 1-3
				| &#91;xF1-xF3&#93;&#91;x80-xBF&#93;{3}          # planes 4-15
				|  xF4&#91;x80-x8F&#93;&#91;x80-xBF&#93;{2}     # plane 16
			)*$%xs', $string);
		}
	}
?>

La constante _is_utf8_split de la función original tenía un valor de 5000, pero con la nueva versión de PHP esto no soluciona el problema. Con este valor la función preg_match() tira abajo el servidor, que responde con “Página no encontrada” a una petción que requiera la función. Haciendo mas pequeño este número solucionamos el problema.