Penormal Unicode

String terlihat yang sama bisa disimpan sebagai sekuens byte berbeda tergantung apakah sebuah aksen ada sebagai satu titik kode atau sebagai huruf plus tanda penggabung. Penormal ini mengonversi teks antara empat bentuk normalisasi Unicode (NFC, NFD, NFKC, NFKD) agar string Anda dibandingkan dengan bersih di basis data, indeks pencarian, skrip deduplikasi, dan kecocokan regex.

Cara menormalkan teks Unicode

  1. 1

    Tempel input Anda

    Masukkan stringnya: huruf beraksen, teks CJK, ligatur, apa pun yang terasa tidak konsisten.

  2. 2

    Pilih bentuk

    Pilih NFC (terkomposisi, bentuk web yang lazim), NFD (terurai), NFKC (kompatibilitas terkomposisi), atau NFKD (kompatibilitas terurai).

  3. 3

    Bandingkan hitungannya

    Alat melaporkan jumlah karakter (titik kode) dan panjang byte sebelum dan sesudah, sehingga Anda bisa melihat apakah bentuk itu memendekkan atau memanjangkan string.

  4. 4

    Salin output ternormalkan

    Gunakan hasilnya di basis data, payload API, generator slug, atau test fixture Anda.

Empat bentuk dan kapan memakai masing-masing

Normalisasi Unicode didefinisikan oleh lampiran standar UAX #15. Keempat bentuk berbeda pada dua sumbu: kanonik lawan kompatibilitas, dan terkomposisi lawan terurai.

Referensi berdampingan

Bentuk Komposisi Pemetaan Kapan dipakai
NFC Terkomposisi Kanonik saja Default untuk konten web, basis data, nama file
NFD Terurai Kanonik saja Pemrosesan teks yang membuang aksen per karakter
NFKC Terkomposisi Termasuk kompat. Pencarian, pengidentifikasi, filter spam, pelipatan tampilan
NFKD Terurai Termasuk kompat. Normalisasi agresif sebelum membuang diakritik

Bentuk kanonik mempertahankan makna

Ketik é dan ganti bentuknya. NFC melaporkan 1 karakter dan 2 byte (titik kode tunggal U+00E9), sedangkan NFD melaporkan 2 karakter dan 3 byte (sebuah e biasa diikuti aksen akut penggabung, U+0301). Keduanya terlihat identik di layar tetapi merupakan sekuens byte yang berbeda, dan ketidaksesuaian itulah yang diperbaiki normalisasi. Bentuk kanonik hanya menata ulang byte, jadi é dalam bentuk mana pun selalu berarti huruf e dengan aksen akut.

Apa yang sebenarnya diubah oleh “kompatibilitas”

Bentuk K (NFKC, NFKD) juga menulis ulang karakter yang tampak berkerabat tetapi membawa format berbeda. Ini bersifat lossy: Anda tidak bisa mendapatkan yang asli kembali. Misalnya:

  • fi (U+FB01, ligatur latin kecil fi) menjadi fi (dua huruf)
  • ① (U+2460, digit satu dalam lingkaran) menjadi 1
  • ㌀ (U+3300, kotak CJK “apaato”) menjadi アパート
  • A lebar-penuh (U+FF21) menjadi A

Itu kuat untuk pencarian dan deduplikasi tetapi merusak tipografi, jadi gunakan bentuk K hanya saat kesetiaan visual tidak penting.

Aturan praktis

  • Simpan konten pengguna dalam NFC.
  • Bandingkan pengidentifikasi dalam NFC agar café yang ditulis sebagai satu titik kode dan café yang ditulis sebagai e + U+0301 cocok; naik ke NFKC saat Anda juga perlu fi dan fi, atau A lebar-penuh dan A, dibandingkan setara, seperti yang dilakukan aturan pengidentifikasi di UAX #31.
  • Buat slug tanpa aksen dengan menormalkan ke NFD dan menghapus blok tanda penggabung U+0300 sampai U+036F.

Pertanyaan yang Sering Diajukan

Biasanya itu berarti input Anda sudah dalam bentuk target. Tempel teks yang mencampur sumber (nama file Mac, cuplikan PDF yang disalin, baris basis data lawas) dan Anda jauh lebih mungkin melihat jumlah karakter dan byte berubah.

Untuk URL tampilan, NFC. Untuk slug yang menginginkan ASCII murni, normalkan ke NFD, buang tanda penggabung dengan regex pada U+0300 sampai U+036F, lalu jadikan huruf kecil. NFKD adalah alternatif saat Anda juga ingin melipat ligatur dan digit dalam lingkaran.

Bentuk kanonik (NFC, NFD) tidak pernah mengubah makna, hanya menata ulang byte. Bentuk kompatibilitas (NFKC, NFKD) memang mengubahnya: ligatur terpisah, huruf lebar-penuh melipat, dan superskrip mendatar. Gunakan hanya saat itulah yang Anda inginkan.

Normalisasi berjalan di server kami memakai kelas Normalizer PHP dan hasilnya kembali dalam request yang sama; teks Anda tidak disimpan. Kami hanya mencatat satu peristiwa anonim yang menandai bentuk mana yang dipakai, tidak pernah kontennya sendiri.

Alat Terkait

Alat ini tersedia dalam bahasa lain