Привет всему хабрасообществу!
Уже не впервый раз стыкаюсь с задачей определения кода юникода по символу. (Если более детально, то мы парсим некоторые сайты, и если там встречаються китайские
крокозабли, иерогливы, то мы должны заблокировать этот материал).
Вопрос №1:
Какие есть варианты определение кода, без установки дополнительных расширений на ПХП (Используеться 5.4.9).
Пробывали использовать:
pear.php.net/package/Text_LanguageDetect — совсем не подходит. Уж очень сильные погрешности.
Сейчас используем собственную утилиту:
/**
* Util for detect unicode code by symbols
*/
class UnicodeOrdDetect
{
/**
* Detect code for one symbol
*
* @param string $char
* @param string $encoding
* @param bool $hex
* @return int
*/
public static function ord($char, $encoding = null, $hex = true)
{
// Default encoding
if (null === $encoding) {
$encoding = 'UTF-8';
}
if (225 >= ($ordChar = ord($char))) {
return $hex === true ? dechex($ordChar) : $ordChar;
}
$char = mb_convert_encoding($char, 'UCS-4BE', $encoding);
list (, $ordChar) = unpack('N', $char);
return $hex === true ? dechex($ordChar) : $ordChar;
}
}
Для теста сверяли с таблицей:
unicode-table.com/ погрешности пока что не нашли.
Вопрос №2:
Корректно ли так определять код юникода, или же есть по лучше способы?
Спасибо!