أدوات النص واليومية · مجموعة أدوات النص
الأحرف غير المرئية: مسافات غير منقسمة، وصلات وحواف ذات عرض صفري
· خلفية
تنظيف النص يونيكود نشر
يقوم بمسح الأحرف التي لا تبدو وكأنها لا شيء - المسافات غير المنفصلة، والمسافات ذات العرض الصفري والوصلات، وعلامات ترتيب البايت - من أين أتت، والتي يتم احتسابها كمسافات بيضاء، وكيفية العثور عليها وإزالتها.
سطرين متطابقين وغير مكررين - كيف تتغلب شخصية غير مرئية على إزالة التكرار والبحث
يمكن أن يبدو سطران متطابقين في المحرر ولكنهما يفشلان في عمليات التحقق من المساواة أو البحث أو إزالة التكرار. قد يحتوي أحدهما على مسافة U+0020 عادية بينما يحتوي الآخر على U+00A0، وهي مسافة غير منقسمة. يمكن أن يؤدي الحرف ذو العرض الصفري إلى إنشاء نفس المشكلة دون شغل أي عرض مرئي، مما يترك للناشر تسميتين متطابقتين ظاهريًا تظلان سلاسل مميزة.
وهذا ليس مجرد مستحضرات تجميلية. يمكن لنقاط التعليمات البرمجية المخفية تقسيم أبعاد التحليلات، أو التغلب على عملية بحث دقيقة، أو الحفاظ على سطر مكرر، أو جعل المعرف المنسوخ يفشل في التحقق من الصحة. قبل إعادة كتابة المحتوى بالعين المجردة، احتفظ بنسخة من المصدر وقارن السلاسل المشبوهة بشكل منهجي. يعد العرض المرئي دليلاً على المظهر، وليس دليلاً على تطابق تسلسلات Unicode الأساسية الخاصة بها.
من أين أتوا - صفحات الويب، ومعالجات النصوص، وتسلسلات الرموز التعبيرية، والنسخ واللصق من ملفات PDF
عادةً ما تصل الشخصيات غير المرئية من خلال العمل العادي. تستخدم صفحات الويب مسافات غير منقسمة للاحتفاظ بالمصطلحات معًا، وتحافظ معالجات النصوص على التباعد الموجه نحو التخطيط، كما يقوم استخراج PDF بإعادة بناء النص من الحروف الرسومية الموضوعة. يمكن أن يؤدي النسخ بين هذه الأنظمة إلى نقل أحرف التنسيق إلى الحقل CMS حتى عندما تعرض الوجهة الكلمات والفجوات المألوفة فقط.
العلامات الأخرى غير المرئية هي أجزاء مقصودة من أنظمة الكتابة أو الرموز التعبيرية. يمكن لأداة الوصل ذات العرض الصفري دمج مكونات الرموز التعبيرية في رمز واحد معروض، بينما تؤثر أدوات الوصل وغير الواصلة على التشكيل في العديد من البرامج النصية. وهذا الأصل مهم: فعبارة "لا أستطيع رؤيته" لا تعني "آمن للحذف". يجب أن يستهدف التنظيف قطعة أثرية تم تشخيصها، وليس كل حرف يكون عرض تقدمه صفرًا.
عائلة المسافات البيضاء - المساحات العادية وغير المتقطعة والضيقة والإيديوغرافية، وما يعتبره زخرفة JavaScript مسافة بيضاء
يحتوي Unicode على أكثر من مجرد المساحة اليومية. U+00A0 هو الفضاء غير المنفصل، U+202F هو الفضاء الضيق غير المنفصل، وU+3000 هو الفضاء الإيديوغرافي. تشتمل معالجة المسافات البيضاء JavaScript على هذه الأحرف، لذا يمكن لـ `trim()` و`trimStart()` و`trimEnd()` إزالتها عند ظهورها عند الحافة ذات الصلة من السلسلة.
يستدعي قطع الأسطر في مجموعة أدوات النص تلك الأساليب JavaScript في كل سطر. إنه لا يقوم بتطبيع التباعد الداخلي، لذلك تظل هناك مسافة غير منقسمة بين كلمتين. تزيل إحصائية "الأحرف بدون مسافات" الأحرف التي تطابقها JavaScript `s`، والتي تكون أكبر من ASCII مسافة. استخدم هذا الرقم كمقياس محدد، وليس كوعد باستبعاد كل نقطة رمز غير مرئية.
عائلة العرض صفر - مسافة العرض صفر، الرابط وغير الرابط، رابط الكلمات وعلامة ترتيب البايت، وهي ليست مسافة بيضاء على الإطلاق
تتبع عائلة العرض الصفري قواعد مختلفة. U+200B مسافة صفرية العرض، U+200C غير وصلة ذات عرض صفري، U+200D وصلة صفرية العرض وU+2060 أداة ربط الكلمات هي أحرف تنسيق بدلاً من JavaScript مسافة بيضاء. وبالتالي فإن `trim()` العادي لا يزيلها. لا يكون السطر الذي يحتوي على إحدى هذه العلامات فارغًا لمجرد أن الشاشة لا تعرض أي حبر.
يحتوي U+FEFF على سجلين مرتبطين: في بداية البيانات المشفرة، يمكنه الإشارة إلى علامة ترتيب البايت، بينما في النص يكون بمثابة مساحة بدون فواصل بعرض صفر. يتضمن ECMAScript U+FEFF في مجموعة المسافات البيضاء المزخرفة، على عكس U+200B حتى U+200D. إن التعامل مع عائلة العرض الصفري بأكملها كنوع واحد من المسافات البيضاء يتعارض مع سلوك JavaScript الفعلي.
اكتشافها - استخدام عداد الأحرف لتحديد الأعداد التي لا تتطابق مع ما تراه، وتذكر أن بعض النجارين يرتبطون بجيرانهم ويظلون مخفيين
يمكن أن ينبهك العدد المفاجئ إلى محتوى مخفي، لكنه لا يمكنه تحديد كل حالة. ToolAcre يحسب مجموعات الحروف مع `Intl.Segmenter` عندما يكون ذلك متاحًا. يمكن للنجار الذي يشارك في تسلسل الرموز التعبيرية أن يساعد عدة نقاط رمز في تكوين حرف واحد، لذا فإن إضافتها أو إزالتها يمكن أن تؤدي إلى تغيير العرض دون إنتاج الزيادة البسيطة المكونة من حرف واحد التي سيظهرها عداد نقطة الرمز.
استخدم عدة أدلة معًا: فشل المطابقات التامة، أو نتيجة غير متوقعة "بدون مسافات"، أو نص منسوخ تم فحصه في محرر مدرك لـ Unicode، أو بحث regex عن نقاط تعليمات برمجية محددة. يستخدم العداد الاحتياطي نقاط التعليمات البرمجية عندما لا يكون Segmenter متاحًا، لذلك يمكن أن تختلف النتائج أيضًا حسب قدرة المستعرض. العد يضيق التحقيق. فهو ليس ماسحًا ضوئيًا للأحرف المخفية أو عارض أسماء Unicode.
اكتشاف الأحرف المخفية: توفر الأعداد أدلة، وليس جردًا كاملاً
للحصول على نسخة ولصق مؤكدة، اعمل على نسخة مكررة وافتح بحث واستبدال في وضع regex. يؤدي البحث عن `[]` والاستبدال بلا شيء إلى إزالة المسافات ذات العرض الصفري وأحرف U+FEFF المضمنة في النص بأكمله. تقوم الأداة بتجميع النمط باستخدام العلامة العامة JavaScript، وتبلغ عن عدد الاستبدال، وتترك النص بدون تغيير إذا كان النمط غير صالح.
لا تقم بتوسيع هذا النمط تلقائيًا إلى `[-]`. يزيل النطاق أيضًا U+200C وU+200D، اللذين يمكنهما تغيير شكل النص وتقسيم الرموز التعبيرية المرتبطة إلى رموز منفصلة. قم بإضافة نقاط الكود هذه فقط عندما يثبت الفحص أنها غير مرغوب فيها. بعد الاستبدال، قم بتشغيل إلغاء التكرار ومقارنة المخرجات بالأصل المحفوظ قبل النشر.
مثال عملي: قم بإزالة الأحرف ذات العرض الصفري غير المرغوب فيها والتي تم تأكيدها فقط قبل إلغاء التكرار
لا تعالج عملية التنظيف هذه أحرف التحكم ثنائية الاتجاه أو الحروف المتجانسة أو كل مشكلة أمنية مرتبطة بالنص المربك. يمكن لعلامات الاتجاه أن تغير الترتيب المرئي، بينما تستخدم الهجمات المتجانسة أحرفًا مرئية مختلفة تشبه بعضها البعض. لا يتم حل أي من المشكلتين عن طريق حذف المسافات، ويمكن أن يؤدي التعبير العادي العشوائي للأحرف غير المرئية إلى إتلاف المحتوى المشروع متعدد اللغات مع تفويت المخاطر الفعلية.
لا تكشف مجموعة الأدوات أيضًا عن علامات regex مثل Unicode أو الوضع متعدد الأسطر، أو تسلط الضوء على كل مباراة قادمة، أو تتنقل عبر البدائل بشكل فردي. يعمل استبدال الكل عبر النص الكامل، وبالتالي فإن العدد المُبلغ عنه وإجراء التراجع يعدان ضمانتين مهمتين. بالنسبة إلى كود المصدر أو النسخة القانونية أو النصوص البرمجية غير المألوفة، قم بفحص كل حرف باستخدام أداة Unicode مخصصة قبل إجراء تعديلات مجمعة.
الوجبات الجاهزة - غير مرئية لا تعني أنها غير ضارة؛ يقوم عداد مجموعة أدوات النص والبحث والاستبدال في التعبير العادي بكشفها وإزالتها دون مغادرة المتصفح
غير مرئي لا يعني أنه فارغ أو قابل للتبديل أو ضار. المسافات غير المنفصلة هي مسافات بيضاء ذات دلالات تخطيطية؛ يمكن أن تحمل النجارات ذات العرض الصفري دلالات تشكيلية؛ U+FEFF يتصرف بشكل مختلف مرة أخرى ضمن JavaScript التشذيب. يبدأ التنظيف الدقيق بتسمية نقطة الرمز، وفهم سبب وجودها وتحديد ما إذا كانت الوجهة لا تزال بحاجة إلى وظيفتها.
استخدم مجموعة أدوات النص كمنصة عمل يتم التحكم فيها من جانب المتصفح: يمكن أن تكشف الأعداد عن وجود تناقض، ويمكن أن يؤدي البحث والاستبدال في regex إلى إزالة مجموعة محددة بدقة، ويمكن أن يؤكد إلغاء التكرار على اختفاء الاختلافات المخفية. احتفظ بالنسخة الأصلية، وتجنب حذف الروابط بشكل افتراضي، وتحقق من النتيجة المقدمة. يعد التصحيح الضيق القابل للمراجعة أكثر أمانًا من التعامل مع جميع Unicode غير المرئية على أنها حطام.