Artigo originado de https://medium.com/@hafiqiqmal93/normalizing-fancy-text-to-normal-text-in-laravel-7d9ed56d5a78
A entrada de texto dos usuários não é nada interessante. Com o advento do Unicode nos smartphones, os usuários agora têm o luxo (e às vezes o capricho) de inserir texto em diversos estilos e formatos. De emojis a diacríticos, de ligaduras a caracteres de largura total, a variedade de “textos sofisticados” pode ser extremamente confusa ou difícil de entender pelo sistema. Embora visualmente atraentes, essas variações de texto representam um desafio significativo para o sistema, especialmente em termos de consistência de dados, capacidade de pesquisa e experiência do usuário.
Aqui está um exemplo de texto sofisticado:-
???????? ???? ? ??? ?????????? ????? ?? ??? ????? ??? ?? ?????????? ?? ??????? ???? ?????? ??? ??? ???? ????? ??? ? ?? ???? ?? ????? ??? ??????? ?? ???? ???? ?? ??? ?? ????? ??? ???????? ?????? ????? ?????, ?? ???? ??????? ???? ????..????? ?? ??? ????. ??? ?????? ???? ?? ???? ????? ?????????
Parece um caractere em itálico, mas não é itálico. Na verdade, pertence aos símbolos alfanuméricos matemáticos.
Bem, um problema muito óbvio é que o PHP não pode codificar JSON de caracteres UTF-8 deformados após o recebimento. Na maneira moderna de desenvolver web, onde APIs e frameworks frontend usam JSON para transportar dados, isso é um problema. Se tratados incorretamente, esses caracteres deformados resultarão em corrupção de dados, falhas ou usuários irritados.
Nosso objetivo é simples: - criamos a solução que converterá todos os textos sofisticados em texto legível normal.
Os formulários de normalização são fundamentais para a compreensão do processo de normalização. Eles atendem a diferentes necessidades linguísticas e técnicas. Por exemplo, o formulário NFC combina caracteres em suas formas compostas, enquanto o NFD faz o oposto, decompondo caracteres compostos em suas partes constituintes. Os formulários NFKC e NFKD vão além, considerando caracteres de compatibilidade - dobrando variações de caracteres em uma forma canônica. Esses formulários garantem que a comparação, a pesquisa e o armazenamento de texto sejam consistentes e confiáveis.
O trecho de código fornecido é um excelente exemplo da abordagem PHP para resolver problemas complexos com simplicidade e eficiência. Vamos dissecar esta solução, entender seus componentes e ver como ela se integra perfeitamente :-
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; }
O uso é simples:-
$normalText = Utils::normalizeText($YOUR_FANCY_STRING)
Você pode se registrar dentro da função auxiliar para facilitar o uso. Por exemplo:-
if ( ! function_exists('normalize_text')) { function normalize_text(string $text): string { return Utils::normalizeText($text) } } // USAGE $normalText = normalize_text($YOUR_FANCY_STRING)
Em sua essência, esta função aproveita a classe **Normalizer** do PHP - uma parte da extensão Internacionalização (intl) - para lidar com a normalização. A classe **Normalizer** oferece vários formulários de normalização, cada um adaptado a diferentes necessidades de normalização. Esta função itera por esses formulários, verificando se o texto já está normalizado em um determinado formulário usando a função **isNormalized**. Caso contrário, ele normaliza o texto para esse formato e retorna a string normalizada.
Embora o texto sofisticado possa adicionar apelo visual à entrada do usuário, ele apresenta desafios significativos para o processamento de dados e a interoperabilidade do sistema. No entanto, com a adoção da classe Normalizer do PHP e a implementação de formas de normalização, os desenvolvedores podem superar esses desafios e garantir que suas aplicações mantenham a consistência e a confiabilidade dos dados diante de diversas entradas de texto.
Você tem alguma experiência ou desafio relacionado ao manuseio de textos sofisticados em seus projetos? Como você atualmente aborda esses problemas e acha a classe Normalizer do PHP útil em seu fluxo de trabalho? Vamos continuar a conversa e compartilhar nossos insights para ajudar uns aos outros a navegar pelas complexidades do desenvolvimento web moderno. ??
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3