PHP nasıl MySQL'in latin1_general_ci harmanlama gibi bir şey elde edebilirim?

2 Cevap php

Ben bir dize genellikle birçok farklı Avrupa dillerinden özel aksanlı karakterler içeren tıbbi terimleri sıralamak işlevini karşılaştırmak yazıyorum ve ben bir şekilde MySQL ile benzer bir harmanlama elde etmek için gereken latin1_general_ci.

Birincisi, ben değil çünkü, varsayılan yerel kullanarak strcoll() üzerine dizeleri geçirdiğinizde sorun gelir alanlarda, tırnak, tire, parantez vb kaldırmak için dizeleri bazı temel munging yapıyorum yeterli, örneğin, bir e normal olarak sözlük sırasında eşdeğer bir aksanlı e düşünün akıllı.

Ben muhtemelen dikkate almak gerekir özel karakterlerin tümünü içermez çünkü Almanca veya Fransızca gibi bir yerel ayarı kullanmak için dikkatli yaşıyorum. latin1_general_ci harmanlama benzer bana bir şey verecek bir yerel var mı? Ya da başka bir çözüm belki var?

Benim saf çözelti daha sonra str_replace() ile bu kullanarak, düzenli mektup eşdeğerleri aksanlı harfleri eşleştirmek için büyük bir ilişkilendirilebilir bir dizi oluşturmak olacaktır, ama bu yavaş ve sıkıcı (ve hata eğilimli) duyulur. Ben oldukça diline mümkünse yerleşik bir şey kullanmak istiyorsunuz.

Ayrıca, o notta, yok strcmp() veya strcasecmp() yerelin harmanlama saygı, ya da sadece bir strcoll() bu mu?

2 Cevap

Belki de bu:

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

strcmp() ve strcasecmp() lokalize değildir.

Ayrıca dizeleri normalleştirmeye yardımcı olmak için iconv işlevlerini deneyebilirsiniz. Bu normal e durumlara aksanlı e hallederim. De, sorting utf8 strings hakkında bu ilgili soruya bakın.