كيف يمكنني تحقيق شيء من هذا القبيل الترتيب الخلية في latin1_general_ci في PHP؟

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

سؤال

وأنا أكتب سلسلة مقارنة وظيفة لفرز المصطلحات الطبية التي غالبا ما تحتوي على أحرف معلمة خاصة من العديد من اللغات الأوروبية المختلفة، وأنا بحاجة إلى تحقيق بطريقة أو بأخرى ترتيب مماثل لlatin1_general_ci الخلية و.

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

وأنا حذرين في استخدام لغة مثل الألمانية أو الفرنسية لأنها ربما لن تشمل كل من الأحرف الخاصة ولست بحاجة للنظر فيها. هل هناك لغة من شأنها أن تعطيني شيئا مماثلا لترتيب latin1_general_ci؟ أم أن هناك ربما حل آخر؟

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

وأيضا في تلك المذكرة، هل strcmp() أو strcasecmp() احترام الترتيب من اللغة الحالية، أم أنها مجرد strcoll() أن يفعل هذا؟

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

المحلول

وربما هذا:

setlocale(LC_COLLATE, 'fr_FR.Latin1', 'fr.Latin1', 'fr_FR.Latin-1', 'fr.Latin-1');

لا يتم ترجمة strcmp() وstrcasecmp().

نصائح أخرى

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

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