Статья взята с https://medium.com/@hafiqiqmal93/normalizing-fancy-text-to-normal-text-in-laravel-7d9ed56d5a78
Текстовый ввод от пользователей совершенно не интересен. С появлением Unicode в смартфонах пользователи теперь могут позволить себе роскошь (а иногда и прихоть) вводить текст в различных стилях и форматах. От смайлов до диакритических знаков, от лигатур до полноразмерных символов — диапазон «необычного текста» может быть чрезвычайно запутанным или трудным для понимания системой. Несмотря на привлекательный внешний вид, эти текстовые варианты представляют собой серьезную проблему для системы, особенно с точки зрения согласованности данных, возможности поиска и удобства взаимодействия с пользователем.
Пример необычного текста:-
???????? ???? ? ??? ?????????? ????? ?? ??? ????? ??? ?? ?????????? ?? ??????? ???? ?????? ??? ??? ???? ????? ??? ? ?? ???? ?? ????? ??? ??????? ?? ???? ???? ?? ??? ?? ????? ??? ???????? ?????? ????? ?????, ?? ???? ??????? ???? ????..????? ?? ??? ????. ??? ?????? ???? ?? ???? ????? ?????????
Похоже на курсив, но это не курсив. На самом деле он принадлежит к математическим буквенно-цифровым символам.
Ну, очень очевидная проблема заключается в том, что PHP не может кодировать JSON деформированные символы UTF-8 при получении. При современном подходе к веб-разработке, когда API и интерфейсные платформы используют JSON для передачи данных, это проблема. При неправильном обращении такие деформированные символы приведут к повреждению данных, сбоям или раздражению пользователей.
Наша цель проста: - найти решение, которое преобразует любой причудливый текст в обычный читаемый текст.
Формы нормализации имеют решающее значение для понимания процесса нормализации. Они удовлетворяют различные лингвистические и технические потребности. Например, форма NFC объединяет символы в их составные формы, тогда как NFD делает противоположное, разлагая составные символы на составные части. Формы NFKC и NFKD идут дальше, рассматривая символы совместимости - свертывания вариаций символов в каноническую форму. Эти формы гарантируют согласованность и надежность сравнения, поиска и хранения текста.
Предоставленный фрагмент кода является прекрасным примером подхода PHP к решению сложных проблем с простотой и эффективностью. Давайте разберем это решение, разберемся в его компонентах и посмотрим, как оно легко интегрируется :-
public static function normalizeText($text): ?string { if (!$text) { return null; } $intl = [ \Normalizer::FORM_C, \Normalizer::FORM_D, \Normalizer::NFD, \Normalizer::FORM_KC, \Normalizer::NFKC, \Normalizer::FORM_KC_CF, \Normalizer::FORM_KD, \Normalizer::NFKD, \Normalizer::NFC, \Normalizer::NFKC_CF, ]; foreach ($intl as $form) { if (!\Normalizer::isNormalized($text, $form)) { return \Normalizer::normalize($text, $form); } } return $text; }
Использование простое: -
$normalText = Utils::normalizeText($YOUR_FANCY_STRING)
Вы можете зарегистрировать внутри вспомогательную функцию, чтобы ее было проще использовать. Например:-
if ( ! function_exists('normalize_text')) { function normalize_text(string $text): string { return Utils::normalizeText($text) } } // USAGE $normalText = normalize_text($YOUR_FANCY_STRING)
По своей сути, эта функция использует класс PHP **Normalizer** — часть расширения интернационализации (intl) — для выполнения нормализации. Класс **Normalizer** предлагает несколько форм нормализации, каждая из которых адаптирована к различным потребностям нормализации. Эта функция перебирает эти формы, проверяя, нормализован ли уже текст в заданной форме, с помощью функции **isNormalized**. Если нет, он нормализует текст к этой форме и возвращает нормализованную строку.
Хотя необычный текст может повысить визуальную привлекательность пользовательского ввода, он создает серьезные проблемы для обработки данных и совместимости систем. Однако с принятием класса PHP Normalizer и реализацией форм нормализации разработчики могут преодолеть эти проблемы и гарантировать, что их приложения сохраняют согласованность и надежность данных при вводе разнообразного текста.
Есть ли у вас опыт или проблемы, связанные с обработкой необычного текста в ваших проектах? Как вы в настоящее время решаете такие проблемы и считаете ли вы, что класс PHP Normalizer полезен в вашем рабочем процессе? Давайте продолжим разговор и поделимся своими мыслями, чтобы помочь друг другу разобраться в сложностях современной веб-разработки. ??
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3