Unicode Normalleştirici

Aynı görünür dizi, bir aksanın tek bir kod noktası olarak mı yoksa bir harf artı bir birleştirici işaret olarak mı bulunduğuna bağlı olarak farklı bayt dizileri şeklinde saklanabilir. Bu normalleştirici, metni dört Unicode normalleştirme biçimi (NFC, NFD, NFKC, NFKD) arasında dönüştürür; böylece dizileriniz veritabanlarında, arama dizinlerinde, yineleme kaldırma betiklerinde ve regex eşleşmelerinde temiz biçimde karşılaştırılır.

Unicode metni nasıl normalleştirilir

  1. 1

    Girdinizi yapıştırın

    Diziyi girin: aksanlı harfler, CJK metin, ligatürler, tutarsız hissettiren her şey.

  2. 2

    Bir biçim seçin

    NFC (birleşik, olağan web biçimi), NFD (ayrışık), NFKC (uyumluluk birleşik) ya da NFKD (uyumluluk ayrışık) seçin.

  3. 3

    Sayımları karşılaştırın

    Araç, öncesi ve sonrası için karakter (kod noktası) sayısını ve bayt uzunluğunu bildirir; böylece biçimin diziyi kısaltıp kısaltmadığını ya da uzatıp uzatmadığını görürsünüz.

  4. 4

    Normalleştirilmiş çıktıyı kopyalayın

    Sonucu veritabanınızda, API yükünde, slug üreticide ya da bir test fikstüründe kullanın.

Dört biçim ve her birinin ne zaman kullanılacağı

Unicode normalleştirme, standart ek UAX #15 tarafından tanımlanır. Dört biçim iki eksende farklılaşır: kanonik ile uyumluluk ve birleşik ile ayrışık.

Yan yana başvuru

Biçim Birleştirme Eşleme Ne zaman kullanılır
NFC Birleşik Yalnızca kanonik Web içeriği, veritabanları, dosya adları için varsayılan
NFD Ayrışık Yalnızca kanonik Karakter başına aksan temizleyen metin işleme
NFKC Birleşik Uyumluluk dahil Arama, tanımlayıcılar, spam filtreleri, görüntü katlama
NFKD Ayrışık Uyumluluk dahil Aksan kaldırmadan önce agresif normalleştirme

Kanonik biçimler anlamı korur

é yazıp biçimleri değiştirin. NFC 1 karakter ve 2 bayt bildirir (tek kod noktası U+00E9), NFD ise 2 karakter ve 3 bayt bildirir (sade bir e ardından birleştirici keskin aksan, U+0301). İkisi ekranda birbirinin aynı görünür ama farklı bayt dizileridir ve normalleştirmenin düzelttiği şey tam da bu uyuşmazlıktır. Kanonik biçimler yalnızca baytları yeniden düzenler, dolayısıyla her iki biçimde de é her zaman keskin aksanlı e harfi anlamına gelir.

“Uyumluluk” aslında neyi değiştirir

K biçimleri (NFKC, NFKD), ilişkili görünen ama farklı biçimlendirme taşıyan karakterleri de yeniden yazar. Bu, kayıplı bir işlemdir: orijinali geri alamazsınız. Örneğin:

  • fi (U+FB01, Latin küçük ligatür fi) fi olur (iki harf)
  • ① (U+2460, daire içinde rakam bir) 1 olur
  • ㌀ (U+3300, CJK kare “apaato”) アパート olur
  • Tam genişlikli A (U+FF21) A olur

Bu, arama ve yineleme kaldırma için güçlüdür ama tipografi için yıkıcıdır; bu yüzden K biçimlerine yalnızca görsel sadakat önemli olmadığında başvurun.

Pratik bir kural

  • Kullanıcı içeriğini NFC biçiminde saklayın.
  • Tanımlayıcıları NFC biçiminde karşılaştırın; böylece tek bir kod noktası olarak yazılan café ile e + U+0301 olarak yazılan café eşleşir. fi ile fi ya da tam genişlikli A ile A da eşit karşılaştırılsın istediğinizde, UAX #31’deki tanımlayıcı kurallarının yaptığı gibi NFKC biçimine geçin.
  • NFD biçimine normalleştirip birleştirici işaret bloğu U+0300 - U+036F aralığını kaldırarak aksansız slug’lar üretin.

Sık Sorulan Sorular

Genellikle girdinizin zaten hedef biçimde olduğu anlamına gelir. Kaynakları karıştıran bir metin (bir Mac dosya adı, kopyalanmış bir PDF parçası, eski bir veritabanı satırı) yapıştırın; karakter ve bayt sayılarının değiştiğini görme olasılığınız çok daha yüksek olur.

Görüntülenen URL’ler için NFC. Saf ASCII istediğiniz slug’lar için NFD’ye normalleştirin, U+0300 - U+036F üzerinde bir regex ile birleştirici işaretleri temizleyin, sonra küçük harfe çevirin. Ligatürleri ve daire içindeki rakamları da katlamak isterseniz NFKD bir alternatiftir.

Kanonik biçimler (NFC, NFD) anlamı asla değiştirmez, yalnızca baytları yeniden düzenler. Uyumluluk biçimleri (NFKC, NFKD) ise değiştirir: ligatürler bölünür, tam genişlikli harfler katlanır ve üst simgeler düzleşir. Onları yalnızca istediğiniz buysa kullanın.

Normalleştirme sunucumuzda PHP’nin Normalizer sınıfı aracılığıyla çalışır ve sonuç aynı istekte geri döner; metniniz saklanmaz. Yalnızca hangi biçimin uygulandığını belirten anonim bir olayı kaydederiz, içeriğin kendisini asla değil.

İlgili Araçlar

Araç diğer dillerde mevcuttur