00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00016 final class SafeUtf8Filter extends BaseFilter
00017 {
00021 public static function me()
00022 {
00023 return Singleton::getInstance(__CLASS__);
00024 }
00025
00026 public function apply($value)
00027 {
00028 $matches = null;
00029
00030
00031 preg_match_all(
00032 '/[\x00-\x7F] ' # ASCII
00033 .'| [\xC2-\xDF] [\x80-\xBF] ' # non-overlong 2-byte sequences
00034 .'| \xE0[\xA0-\xBF] [\x80-\xBF] ' # excluding overlongs
00035 .'| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} ' # straight 3-byte sequences
00036 .'| \xED[\x80-\x9F] [\x80-\xBF] ' # excluding surrogates
00037 .'| \xF0[\x90-\xBF] [\x80-\xBF]{2} ' # planes 1-3
00038 .'| [\xF1-\xF3] [\x80-\xBF]{3} ' # planes 4-15
00039 .'| \xF4[\x80-\x8F][\x80-\xBF]{2} ' # plane 16
00040 .'/x',
00041 $value,
00042 $matches
00043 );
00044
00045 if (!isset($matches[0]))
00046 return null;
00047 else
00048 return implode(null, $matches[0]);
00049 }
00050 }
00051 ?>