تم نشر المقال من https://medium.com/@hafiqiqmal93/normalizing-fancy-text-to-normal-text-in-laravel-7d9ed56d5a78
إدخال النص من المستخدمين ليس مثيرًا للاهتمام على الإطلاق. مع ظهور Unicode في الهواتف الذكية، أصبح لدى المستخدمين الآن الرفاهية (وأحيانًا النزوة) لإدخال النص بمجموعة متنوعة من الأساليب والتنسيقات. من الرموز التعبيرية إلى علامات التشكيل، ومن الحروف المركبة إلى الأحرف ذات العرض الكامل، يمكن أن يكون نطاق "النص الرائع" مربكًا للغاية أو يصعب فهمه بواسطة النظام. على الرغم من كونها جذابة بصريًا، إلا أن هذه الاختلافات النصية تشكل تحديًا كبيرًا للنظام خاصة من حيث اتساق البيانات وإمكانية البحث وتجربة المستخدم.
إليك مثال النص الرائع:-
???????? ???? ? ??? ?????????? ????? ?? ??? ????? ??? ?? ?????????? ?? ??????? ???? ?????? ??? ??? ???? ????? ??? ? ?? ???? ?? ????? ??? ??????? ?? ???? ???? ?? ??? ?? ????? ??? ???????? ?????? ????? ?????, ?? ???? ??????? ???? ????..????? ?? ??? ????. ??? ?????? ???? ?? ???? ????? ?????????
يبدو وكأنه حرف مائل ولكنه ليس مائلًا. إنه في الواقع ينتمي إلى الرموز الأبجدية الرقمية الرياضية.
حسنًا، المشكلة الواضحة جدًا هي أن PHP لا تستطيع تشفير JSON لأحرف UTF-8 المشوهة عند الاستلام. في الطريقة الحديثة لتطوير الويب، حيث تستخدم واجهات برمجة التطبيقات وأطر الواجهة الأمامية JSON لنقل البيانات، تعد هذه مشكلة. إذا تم التعامل معها بشكل خاطئ، فإن هذه الأحرف المشوهة ستؤدي إلى تلف البيانات أو تعطلها أو غضب المستخدمين.
هدفنا بسيط :- توصلنا إلى الحل الذي سيحول كل نص رائع إلى نص عادي قابل للقراءة.
تعتبر نماذج التطبيع محورية لفهم عملية التطبيع. أنها تلبي الاحتياجات اللغوية والتقنية المختلفة. على سبيل المثال، يقوم نموذج NFC بدمج الأحرف في أشكالها المركبة، في حين يقوم NFC بالعكس، حيث يقوم بتحليل الأحرف المركبة إلى الأجزاء المكونة لها. تذهب نماذج 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)
في جوهرها، تعمل هذه الوظيفة على تعزيز فئة **Normalizer** الخاصة بـ PHP - وهي جزء من ملحق التدويل (intl) - لمعالجة التسوية. تقدم فئة **Normalizer** العديد من نماذج التسوية، كل منها مصمم خصيصًا لتلبية احتياجات التسوية المختلفة. تتكرر هذه الوظيفة من خلال هذه النماذج، للتحقق مما إذا كان النص قد تم تطبيعه بالفعل في نموذج معين باستخدام وظيفة **isNormalized**. إذا لم يكن الأمر كذلك، فإنه يقوم بتطبيع النص إلى هذا النموذج وإرجاع السلسلة التي تمت تسويتها.
على الرغم من أن النص الرائع قد يضيف جاذبية مرئية لإدخال المستخدم، إلا أنه يشكل تحديات كبيرة لمعالجة البيانات وقابلية التشغيل البيني للنظام. ومع ذلك، مع اعتماد فئة Normalizer الخاصة بـ PHP وتنفيذ نماذج التطبيع، يمكن للمطورين التغلب على هذه التحديات والتأكد من أن تطبيقاتهم تحافظ على اتساق البيانات وموثوقيتها في مواجهة مدخلات النص المتنوعة.
هل لديك أي تجارب أو تحديات تتعلق بالتعامل مع النصوص الفاخرة في مشاريعك؟ كيف تتعامل حاليًا مع مثل هذه المشكلات، وهل تجد فئة Normalizer الخاصة بـ PHP مفيدة في سير عملك؟ دعونا نواصل المحادثة ونشارك أفكارنا لمساعدة بعضنا البعض في التغلب على تعقيدات تطوير الويب الحديث. ??
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3