กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้
Ini baru-baru ini muncul di bagian komentar facebook.
Bagaimana kita bisa membersihkan ini?
Jawaban:
Itu adalah karakter dengan serangkaian karakter gabungan . Karena karakter penggabung yang dimaksud ingin melebihi karakter dasar, karakter tersebut bertumpuk (secara harfiah). Misalnya, kasus
ก้้้้้้้้้้้้้้้้้้้้
... itu adalah ก (karakter Thai ko kai ) ( U + 0E01 ) diikuti oleh 20 salinan karakter gabungan Thai mai tho ( U + 0E49 ).
Anda dapat memproses teks sebelumnya dan membatasi jumlah karakter gabungan yang dapat diterapkan ke satu karakter, tetapi upaya tersebut mungkin tidak sepadan dengan hasilnya. Anda memerlukan lembar data untuk semua karakter saat ini sehingga Anda akan tahu apakah mereka bergabung atau apa, dan Anda harus memastikan untuk mengizinkan setidaknya beberapa karena beberapa bahasa ditulis dengan beberapa diakritik pada satu basis . Sekarang, jika Anda ingin membatasi komentar ke kumpulan karakter Latin, itu akan menjadi pemeriksaan rentang yang lebih mudah, tetapi tentu saja itu hanya opsi jika Anda ingin membatasi komentar hanya untuk beberapa bahasa. Informasi lebih lanjut, lembar kode, dll. Di unicode.org .
BTW, jika Anda ingin tahu bagaimana beberapa karakter disusun, untuk pertanyaan lain baru-baru ini saya membuat halaman "Unicode Show Me" yang cepat dan kotor di JSBin. Anda cukup menyalin dan menempel teks ke dalam area teks, dan ini menunjukkan kepada Anda semua titik kode (~ karakter) dari teks itu, dengan tautan seperti yang ada di atas ke halaman yang menjelaskan setiap karakter. Ini hanya berfungsi untuk poin kode dalam rentang U + FFFF dan di bawahnya, karena ditulis dalam JavaScript dan untuk menangani karakter di atas U + FFFF dalam JavaScript Anda harus melakukan lebih banyak pekerjaan daripada yang ingin saya lakukan untuk pertanyaan itu (karena dalam JavaScript, a "karakter" selalu 16 bit, yang berarti untuk beberapa bahasa karakter dapat dibagi menjadi dua "karakter" JavaScript yang terpisah dan saya tidak memperhitungkannya), tetapi berguna untuk sebagian besar teks ...
sumber
Jika Anda memiliki mesin regex dengan dukungan Unicode yang layak, sangat mudah untuk membersihkan string semacam ini. Di Perl, misalnya, Anda dapat menghapus semua kecuali tanda kombinasi pertama dari setiap karakter (yang dirasakan pengguna) seperti ini:
#!/usr/bin/perl use strict; use utf8; binmode(STDOUT, ':utf8'); my $string = "กิิ ก้้ ก็็ ก็็ กิิ ก้้ ก็็ กิิ ก้้ กิิ ก้้ ก็็ ก็็ กิิ ก้้ ก็็ กิิ ก้้"; $string =~ s/(\p{Mark})\p{Mark}+/$1/g; # Strip excess combining marks print("$string\n");
Ini akan mencetak:
กิ ก้ ก็ ก็ กิ ก้ ก็ กิ ก้ กิ ก้ ก็ ก็ กิ ก้ ก็ กิ ก้
sumber
<base><macron><overline><macron><overline>...
. Jadi, jika teks Anda membutuhkan beberapa karakter penggabungan yang berbeda , itu akan lolos dengan baik; dan teks berbahaya masih bisa dibuat."Bagaimana kita bisa membersihkan ini" adalah jawaban terbaik di atas oleh TJ Crowder
Namun, saya pikir sanitasi adalah pendekatan yang salah, dan Cristy melakukannya dengan benar
overflow:hidden
pada elemen yang mengandung css.Setidaknya, begitulah cara saya mengatasinya.
sumber
Oke, yang ini butuh waktu lama untuk memikirkannya, saya mendapat kesan bahwa menggabungkan karakter untuk menghasilkan zalgo terbatas pada ini . Jadi saya berharap mengikuti regex untuk menangkap orang aneh.
dan itu tidak berhasil ...
Tangkapannya adalah bahwa daftar di wiki tidak mencakup seluruh kombinasi karakter.
Apa yang memberi saya petunjuk adalah
"ก้้้้้้้้้้้้้้้้้้้้".charCodeAt(2).toString(16)
= "e49" yang tidak berada dalam kisaran penggabungan, itu termasuk dalam 'Penggunaan pribadi'.Di C # mereka berada di bawah
UnicodeCategory.NonSpacingMark
dan skrip berikut menghapusnya:Dengan melihat tabel yang dihasilkan, Anda harus dapat melihat mana yang menumpuk. Satu rentang yang hilang di wiki adalah yang
06D6-06DC
lain0730-0749
.MEMPERBARUI:
Berikut regex yang diperbarui yang seharusnya mengeluarkan semua zalgo termasuk yang dilewati dalam kisaran 'normal'.
Bagian tersulit adalah mengidentifikasinya, setelah Anda melakukannya - ada banyak solusi termasuk beberapa yang bagus di atas.
Semoga ini menghemat waktu Anda.
sumber
([\u0300–\u036F\u1AB0–\u1AFF\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F]{2,})
tidak berfungsi. Tidakkah Anda merasa menarik bahwa menumpuk unicode tidak terbatas pada whats di wiki? Apa yang Anda maksud dengan 'pertanyaan terjawab yang hilang'? EDIT : Anda mungkin merasa aneh untuk menambahkan jawaban atas pertanyaan berusia 3 tahun, tetapi karena saya butuh beberapa saat untuk mencari tahu mengapa jenis zalgo ini berhasil, saya tidak bisa membiarkan pengetahuan seperti itu sia-sia. Orang berikutnya akan menghemat waktu.