/** * @param $s * @param int $normalization_form * @param string $leading_combining * * @return array|bool|mixed|string */ public static function filterString($s, $normalization_form = 4, $leading_combining = 'â—Œ') { if (false !== strpos($s, "\r")) { // Workaround https://bugs.php.net/65732 $s = str_replace(array("\r\n", "\r"), "\n", $s); } if (preg_match('/[\\x80-\\xFF]/', $s)) { if (Normalizer::isNormalized($s, $normalization_form)) { $n = '-'; } else { $n = Normalizer::normalize($s, $normalization_form); if (isset($n[0])) { $s = $n; } else { $s = UTF8::encode('UTF-8', $s); } } if ($s[0] >= "€" && isset($n[0], $leading_combining[0]) && preg_match('/^\\p{Mn}/u', $s)) { // Prevent leading combining chars // for NFC-safe concatenations. $s = $leading_combining . $s; } } return $s; }
/** * @param string $str * @param int $form * * @return bool */ function normalizer_is_normalized($str, $form = s\Normalizer::NFC) { return s\Normalizer::isNormalized($str, $form); }
/** * normalizes to UTF-8 NFC, converting from CP-1252 when needed * * @param $var * @param int $normalization_form * @param string $leading_combining * * @return mixed|string */ public static function filter($var, $normalization_form = 4, $leading_combining = '◌') { switch (gettype($var)) { case 'array': foreach ($var as $k => $v) { /** @noinspection AlterInForeachInspection */ $var[$k] = self::filter($v, $normalization_form, $leading_combining); } break; case 'object': foreach ($var as $k => $v) { $var->{$k} = self::filter($v, $normalization_form, $leading_combining); } break; case 'string': if (false !== strpos($var, "\r")) { // Workaround https://bugs.php.net/65732 $var = str_replace(array("\r\n", "\r"), "\n", $var); } if (preg_match('/[\\x80-\\xFF]/', $var)) { if (Normalizer::isNormalized($var, $normalization_form)) { $n = '-'; } else { $n = Normalizer::normalize($var, $normalization_form); if (isset($n[0])) { $var = $n; } else { $var = self::encode('UTF-8', $var); } } if ($var[0] >= "�" && isset($n[0], $leading_combining[0]) && preg_match('/^\\p{Mn}/u', $var)) { // Prevent leading combining chars // for NFC-safe concatenations. $var = $leading_combining . $var; } } break; } return $var; }