Intereting Posts
Увеличьте размер загрузки на Nginx Проблемы с PHP imagejpeg () Получение часа и минуты в PHP Выполнить анализ SOAP-ответа с помощью PHP? Прикрепление значения текстового поля к ссылке в виде переменной без использования кнопки отправки Компиляция php с модулями vs с использованием общих модулей? Запустите sql-запрос с таймаутом в PHP или Как в PHP, чтобы остановить запрос sql, как только он уже начался? предотвращать предупреждения об ошибках, если соединение не может быть установлено .htaccess url переписать и удалить% 20 ​​ Могу ли я щелкнуть, чтобы перейти к методу / объекту в Sublime Text, как я могу в NetBeans Перенаправление на новую страницу, когда пользователь использует Internet Explorer Дата PHP ('W') против MySQL YEARWEEK (теперь ()) как предотвратить SQL-инъекцию из этого запроса? как включить pthreads на MAMP Правильный способ загрузки базового класса + расширенный класс в PHP

Признание текста как упрощенного или традиционного китайского

Учитывая блок текста, который, как известно, является китайским и кодируется в UTF-8, существует ли способ определить, является ли это упрощенным или традиционным?

Я не знаю, будет ли это работать, но я попытаюсь использовать iconv, чтобы убедиться, что он правильно переводит между кодировками, сравнивая результаты с тем же преобразованием с // TRANSLIT и // IGNORE. Если оба результата совпадают, то преобразование набора символов не встречается ни с какими символами, которые не могут перевести, поэтому вы должны иметь совпадение.

$test1 = iconv("UTF-8", "big5//TRANSLIT", $text); $test2 = iconv("UTF-8", "big5//IGNORE", $text); if ($test1 == $test2) { echo 'traditional'; } else { $test3 = iconv("UTF-8", "gb2312//TRANSLIT", $text); $test4 = iconv("UTF-8", "gb2312//IGNORE", $text); if ($test3 == $test4) { echo 'simplified'; } else { echo 'Failed to match either traditional or simplified'; } } 

Поскольку big5 и gb2312 опускают довольно много часто используемых вариантов, которые присутствуют в Юникоде, код полагается на точное соответствие между режимами translit и ignore не удастся в довольно многих нормальных случаях использования: он не сможет идентифицировать 説話 как традиционный китайский, несмотря на является общим вариантом в Гонконге для который используется в big5 .

Простое решение – сделать это нечетким способом:

 $test1 = iconv("UTF-8", "big5//IGNORE", $text); $test2 = iconv("UTF-8", "gb2312//IGNORE", $text); $len1 = mb_strlen($test1); $len2 = mb_strlen($test2); $len0 = mb_strlen($text) * 0.8; // threshold if ($len1 > $len2 && $len1 > $len0) { return 'Likely Traditional'; } if ($len2 > $len1 && $len2 > $len0) { return 'Likely Simplified'; } return 'Could not identify';