أحرف Unicode التي يمكن استخدامها لخداع فارز السلسلة؟

StackOverflow https://stackoverflow.com/questions/151844

  •  02-07-2019
  •  | 
  •  

سؤال

نظرًا لأن Unicode يفتقر إلى سلسلة من أحرف الفرز ذات العرض الصفري، فأنا بحاجة إلى تحديد أحرف مكافئة تسمح لي بفرض ترتيب معين على القائمة التي يتم فرزها تلقائيًا حسب قيم الأحرف.لسوء الحظ، عناصر القائمة ليست مرتبة أبجديًا، كما أنه ليس من المقبول أن تبدأها بأحرف مرئية لضمان تطابق نتيجة الفرز مع النتيجة المطلوبة.

ما هي أحرف Unicode التي يمكن طرحها أمام نص الأبجدية اللاتينية العادي، ولن تظهر، ولكن مع ذلك تسمح لي "برفع" النوع بالطريقة التي أطلبها؟

(راجع للشغل يتم ذلك باستخدام Drupal 5 مع حقل قائمة ملف تعريف المستخدم.لا تهتم باقتراح تغيير ذلك إلى مفردات/فئة.)

هل كانت مفيدة؟

المحلول

ربما ينبغي للمساحة ذات العرض الصفري (U+200B) أن تفعل ما تريد.من مواصفات Unicode:

مساحة العرض صفر.تشير مساحة العرض U+200B ZERO WIDTH إلى فرصة فاصل الأسطر، فيما عدا أنه ليس لها عرض.تم تصميم أحرف المسافة ذات العرض الصفري لاستخدامها في اللغات التي لا تحتوي على تباعد مرئي بين الكلمات لتمثيل فرص فاصل الأسطر، مثل التايلاندية والخميرية واليابانية.

يجب أن يكون موجودًا في معظم الخطوط التي تستخدمها، ولكن YMMV.

نصائح أخرى

أنا شخصياً أفضل استخدام مفتاح الفرز الأساسي/الثانوي.إنه أقل تعقيدًا وسهل التنفيذ في استعلام SQL نموذجي (ORDER BY column_a,column_b). تم التعديل للإضافة:في PHP، يمكنك استخدام usort(array, comparisonFunction) مع وظيفة مقارنة مخصصة لإضافة منطق إضافي للفرز، إذا لم تتمكن من استخدام SQL للقيام بالخدعة.

ومع ذلك، إذا كان لديك عمود واحد فقط للعمل عليه وهذا غير قابل للإصلاح، فما عليك سوى وضع بادئة بعدد معين من الأحرف غير المتوقعة مثل الشرطة السفلية للفرز، ثم قم بإزالتها قبل عرضها مباشرة.(باستخدام استبدال regexp أو ما شابه).

ستعتمد الاختراقات المستندة إلى Unicode بشكل كبير على الخطوط المستخدمة، وترتيب الترتيب/الفرز الخاص بالإعدادات المحلية التي تستخدمها، وقد تؤدي إلى آثار جانبية غير مرغوب فيها على العملاء الذين لا يمكنك التحكم بهم (متصفحات مختلفة، وأنظمة تشغيل مختلفة، ولغات عميل مختلفة) .معظم الأحرف "غير القابلة للطباعة" تنتج "الحرف غير المعروف" عند عرضها على الأنظمة دون دعم لها، والذي يبدو عادةً كمربع فارغ.هناك بعض الأحرف ذات العرض الصفري المستخدمة في لغات مثل اللغة العربية، لكن لا ينبغي أن تؤثر على الفرز إلا في التطبيقات التي تحتوي على دعم Unicode ضار للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top