Cara menampilkan enye di php

Itu bahkan menjadi sangat transparan sejak lahirnya format UTF-8 Unicode yang cerdik sehingga bahkan seorang pengembang pun mungkin akan tersesat ketika terjadi ketidakcocokan.

RINGKASAN
1. Apa itu penyandian?
⇒ Penjelasan pengkodean dengan contoh konkret

2. format UTF-8
⇒ Fokus pada format Unicode UTF-8 yang secara teoritis menghilangkan masalah penyandian apa pun

3. Masalah pengodean yang terus-menerus
⇒ Mengapa meskipun dalam format Unicode, masalah penyandian tetap relevan?

4. Tentukan pengkodean file
⇒ Kami menawarkan alat standar untuk menentukan penyandian teks dengan mudah

5. Latihan VBA tingkat lanjut
⇒ Cara membuat file Unicode di VBA dengan atau tanpa BOM

Jangan ragu untuk meninggalkan komentar dan meminta dukungan untuk masalah penyandian tertentu

Sebuah string tidak disimpan dalam memori sebagai string melainkan sebagai 0 dan 1 dalam biner

Representasi yang paling mudah dibaca untuk kita dari kode biner ini adalah kode heksadesimal di mana setiap byte mewakili satu karakter dalam ASCII atau ASCII yang diperluas

Contoh

String berikut dikodekan dengan kode "Windows-1252".
“L’expérience est le nom que chacun donne a ses erreurs. ” Oscar Wilde
Dalam kode heksadesimal direpresentasikan seperti yang ditunjukkan di bawah ini

22 4C 27 65 78 70 E9 72 69 65 6E 63 65 20 65 73“Pengalaman es74 20 6C 65 20 6E 6F 6D 20 71 75 65 20 63 68 61t le nom que cha63 75 6E 20 64 6E 6E 6 . ” Oscar57 69 6C 64 65 Wilde

Karakter ke-7 "é" disimpan dalam memori menggunakan nilai heksadesimal berikut. “E9”

Di tabel karakter Windows-1252, kode "E9" sesuai dengan karakter Prancis "é"

Windows-1252 (CP1252)x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF0xNULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI1xDLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS2xSP!“#$%&‘()*+,–./3x0123456789:;<=>?4x@ABCDEFGHIJKLMNO5xPQRSTUVWXYZ[\]^_6x`abcdefghijklmno7xpqrstuvwxyz{|}~DEL8x€‚ƒ„…†‡ˆ‰Š‹ŒŽ9x‘‘“”•–—˜™š›œžŸAxNBSP¡¢£¤¥¦§¨©ª«¬®¯Bx°±²³´µ¶·¸¹º»¼½¾¿CxÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏDxÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßExàáâãäåæçèéêëìíîïFxðñòóôõö÷øùúûüýþÿ

Namun, jika Anda masuk ke jendela MS-DOS, kode heksadesimal "E9" tidak akan ditampilkan dengan benar

Memang, jendela MS-DOS Prancis akan menampilkan yang berikut ini

Cd \temp
Tes tipe. txt
“L’expÚrience est le nom que chacun donne Ó ses erreurs. ” Oscar Wilde

Ini hanya karena MS-DOS menganggap secara default bahwa teks (pada komputer Prancis) dikodekan menggunakan halaman 850 di bawah

page 850 (DOS latin-1)x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF0xNULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI1xDLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS2xSP!“#$%&‘()*+,–./3x0123456789:;<=>?4x@ABCDEFGHIJKLMNO5xPQRSTUVWXYZ[\]^_6x`abcdefghijklmno7xpqrstuvwxyz{|}~DEL8xÇüéâäàåçêëèïîìÄÅ9xÉæÆôöòûùÿÖÜø£Ø׃AxáíóúñѪº¿®¬½¼¡«»Bx░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐Cx└┴┬├─┼ãÃ╚╔╩╦╠═╬¤DxðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ExÓßÔÒõÕµþÞÚÛÙýݯ´FxSHY±‗¾¶§÷¸°¨·¹³²■NBSP

Kode heksadesimal "E9" cocok dengan karakter "Ú" dari halaman 850 daftar karakter dan tidak cocok dengan karakter "é" seperti yang mungkin kita duga

Dengan demikian dipahami bahwa file teks sebenarnya adalah pesan kode (bukan pesan terenkripsi) yang harus diterjemahkan menggunakan tabel terjemahan yang tepat.

Oleh karena itu, kesulitannya menjadi dua kali lipat

– Anda harus hati-hati memilih, tergantung pada aplikasi target, pengkodean yang akan digunakan saat menyimpan teks
– Ketika saatnya untuk menampilkan teks, perlu untuk dapat menentukan pengkodean yang digunakan

Blog INVIVOO menggunakan pengodean UTF-8. Tetapi jika Anda bersenang-senang memaksakan penggunaan pengkodean ISO-8859-7 di Internet Explorer menggunakan menu "View => Encoding => More => Greek (ISO)" maka karakter windows-1252 di bawah ini akan salah ditampilkan

x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExFFxðñòóôõö÷øùúûüýþÿ

Menggunakan ISO-8859-7, karakter di atas akan ditampilkan sebagai karakter di bawah ini

x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExFFxðñòóôáâ÷øùúûüýþÿ

Kita dapat melihat bahwa karakter Barat yang diharapkan sekarang ditampilkan dengan buruk dan ada 2 karakter, bukan hanya satu

Ini karena dalam pengkodean Unicode UTF-8, karakter khusus Barat semuanya dikodekan byte ganda. Dan karena pengkodean ISO-8859-7 (Yunani) menganggap bahwa masing-masing dari dua byte ini adalah karakter tersendiri dalam tabel pemetaannya

Perhatikan bahwa jumlah pengkodean yang ada cukup besar. Masing-masing memiliki alasan yang konsisten setelah Anda mengetahui Sejarah Pengkodean. Mengikuti internasionalisasi yang datang dengan perkembangan Internet, manajemen pengkodean menjadi semakin kompleks karena lingkungan multibahasa

Untungnya, Standar Unicode telah berhasil melewati tantangan untuk mengumpulkan setiap karakter dari setiap pengkodean dalam satu dan hanya tabel karakter. daftar karakter Unicode

Format Unicode lahir dari keinginan untuk menyatukan banyak pengkodean yang ada. Banyaknya kode diperlukan karena sistem selalu menganggap bahwa satu byte berkorespondensi dengan satu karakter. Namun, pada satu byte hanya 256 karakter yang dapat dikodekan. Oleh karena itu, beberapa bahasa memerlukan kode ASCII tambahan mereka sendiri. Bahasa Prancis "é" misalnya sama sekali tidak berguna untuk orang Yunani yang juga perlu mengkode seluruh alfabet mereka sendiri

Solusi Unicode adalah menghilangkan batasan byte tunggal untuk memiliki jumlah karakter yang hampir tak terbatas. Karakter Asia dapat dikodekan misalnya menggunakan 4 byte

Sayangnya ada beberapa versi format Unicode tergantung pada apakah jumlah byte per karakter tetap atau dinamis, dan tergantung pada urutan membaca byte

Kami hanya akan menyajikan format UTF-8 karena cenderung mendominasi karena efisiensinya dalam hal ukuran memori dan karena kompatibilitasnya dengan ASCII. Memang, tidak ada yang membedakan file ASCII lama dari file UTF-8. Hanya ketika karakter khusus digunakan, file UTF-8 akan dibedakan dari ASCII

Karakter khusus dalam UTF-8 disimpan dalam heksadesimal dari 2 hingga 4 byte. Itu dikodekan hanya dengan menghormati peta karakter UTF-8. Entah bagaimana, itu masih sesederhana dulu. Sebuah "kode" selalu merupakan karakter tunggal dalam pemetaan karakter

Jika aplikasi tidak dapat membaca UTF-8 atau jika dipaksa dalam ASCII yang diperluas (seperti pada contoh kami sebelumnya tentang memaksa ISO-8859-7 di internet explorer) maka aplikasi akan membaca setiap byte sebagai satu karakter berbeda. Namun, karakter khusus Eropa Barat semuanya dikodekan pada 2 byte di UTF-8

=> Karena alasan inilah karakter beraksen ditampilkan pada 2 karakter, bukan hanya satu ketika penyandian ditentukan dengan buruk

Anda sekarang tahu hampir segalanya tentang UTF-8

– Ini memiliki kompatibilitas mundur dengan ASCII
– Karakter khusus disimpan pada 2 hingga 4 byte
– Seperti penyandian apa pun, aplikasi yang "membaca" kode heksadesimal harus menggunakan penyandian yang benar

Anda hanya tahu “hampir semuanya” karena ada fitur khusus di Unicode yang masih menimbulkan beberapa masalah kompatibilitas. BOM (Urutan Tanda Byte). Kami akan membicarakannya di bagian selanjutnya

Setelah presentasi pengkodean teks yang diperlukan ini, kami akhirnya sampai ke poin utama artikel ini melalui pertanyaan berikut

Jika UTF-8 memiliki semua karakter dan dapat mengganti semua kode, mengapa kita masih mengalami masalah penyandian ???

1. Perubahan membutuhkan waktu

Alasan utamanya adalah bahwa sistem lama tidak harus berkembang bersamaan dengan revolusi Unicode. Dengan demikian, mungkin ada beberapa database atau aplikasi atau paket yang mungkin telah diprogram untuk menerima pengkodean tertentu dan cukup sering mereka mengharapkan satu byte per karakter.

2. Kekhususan Microsoft Windows

Microsoft mengambil kebebasan untuk membuat tabel karakternya sendiri yang berasal dari tabel ISO-8859-x. Selain itu, tidak mungkin untuk mengetahui apakah suatu teks menggunakan tabel ISO atau tabel Windows karena keduanya hanya sesuai dengan urutan byte

Kebebasan yang diambil oleh Microsoft ini tidak akan menjadi masalah jika aplikasi Windows menggunakan UTF-8 secara default tetapi tidak demikian. Selama tidak ada karakter khusus di luar tabel Windows-1252, sebagian besar aplikasi Windows tidak menyandikan teks menggunakan UTF-8

Dengan demikian, mengirimkan file teks Windows ke server linux atau aplikasi berpemilik dapat dengan mudah menimbulkan kebingungan

3. Font karakter

Karena Unicode dapat menyandikan semua karakter yang mungkin, itu menjadi mimpi buruk bagi seniman yang membuat font karena menggambar ulang setiap karakter adalah tugas yang sangat besar. Dan mereka tidak melakukannya agar mereka dapat fokus pada bahasa yang mereka minati. Selain itu, standar Unicode dapat menambahkan karakter baru ke tabel dan font yang ada menjadi tidak lengkap

Akibatnya, untuk bahasa eksotis, mungkin perlu bekerja dengan font tertentu

Namun, font hanya memengaruhi tampilan untuk pengguna akhir dan sama sekali tidak akan mengganggu pemrosesan atau penyimpanan basis data string Anda

3. BOM (Byte Order Mark)

Tanda Urutan Byte adalah urutan byte Unicode yang tidak dapat dicetak yang ditempatkan di awal teks Unicode untuk memfasilitasi interpretasinya. Tanda Urutan Byte ini bukan standar atau wajib tetapi memudahkan aplikasi yang kompatibel untuk menentukan subtipe format Unicode dan menentukan arah untuk membaca byte

Ini sering menyebabkan masalah kompatibilitas karena tidak semua aplikasi tahu cara menangani "BOM". Untuk aplikasi yang tidak kompatibel, urutan byte ini dianggap sebagai beberapa karakter normal dalam ASCII yang diperluas. Dalam kasus file UTF-8 yang salah dikenali sebagai file Windows-1252, kita akan melihat 3 karakter aneh di awal file. saya"

Karakter  sesuai dengan string heksadesimal EF BB BF yang merupakan kode untuk menunjukkan ke aplikasi yang kompatibel bahwa file tersebut adalah file Unicode dalam format UTF-8

Masalah lain dari BOM adalah kebingungan yang dapat ditimbulkannya bagi pengguna. EF BB BF sesuai dengan beberapa karakter yang tidak dapat dicetak di UTF-8. Jadi, dalam editor teks Unicode, sulit untuk mengetahui apakah BOM telah diterapkan atau tidak karena tidak terlihat dan juga opsional dalam file UTF-8. Banyak pengguna kemungkinan besar tidak tahu apa itu BOM dan bagaimana BOM dapat merusak aplikasi yang tidak kompatibel

Selain itu, ada lebih banyak BOM yang memungkinkan untuk melihat format Unicode berbeda dari UTF-8 dan umumnya lebih kompatibel dengan yang lain

Karena BOM tidak terlihat oleh pengguna, kebingungan menjadi jelas dan tak terelakkan

Namun, pada bagian di bawah ini, kami akan memberi Anda alat standar sehingga Anda dapat dengan cepat menentukan apakah file Anda seperti yang Anda harapkan.

Terlepas dari asal file, apakah dihasilkan secara otomatis, atau dikirim oleh penyedia data, atau dibuat secara manual, mungkin berguna untuk memverifikasi dengan pasti formatnya dan untuk menunjukkan kemungkinan tag BOM

Jika Anda tidak memiliki akses ke editor teks tingkat lanjut (dan biasanya berbayar), Anda dapat melakukannya dengan mudah menggunakan editor heksadesimal standar di Windows dan linux

Di Windows
- Jendela kunci + R
- Perintah powershell
– CD \temp
– Tes Fhx. txt

Di Linux
cd /rumah/tes/
file -bi tes. txt
=> Linux akan “mencoba” menampilkan format file tetapi jika ingin melihat tag BOM maka perlu mengetikkan berikut ini
tes xxd. txt

Jika ada tag BOM di awal file maka itu adalah teks menggunakan format Unicode
UTF-8 = EF BB BF
UTF-16 Big Endian = FE FF
UTF-16 Little Endian = FF FE
UTF-32 Big Endian = 00 00 FE FF
UTF-32 Little Endian = FF FE 00 00

Yang terpenting, ingatlah bahwa tidak adanya tag BOM tidak berarti bahwa file tersebut bukan file Unicode

Memang, sebaliknya, mungkin perlu menghapusnya untuk meningkatkan kompatibilitas dengan aplikasi Anda

Di bagian selanjutnya, kita akan melihat cara menghapus BOM di VBA untuk menghindari aplikasi downstream yang mogok

Saat Anda membuat file Unicode menggunakan makro VBA yang ditujukan untuk aplikasi sensitif format, Anda mungkin akan menemui beberapa kesulitan dalam menguasai BOM

Sebagai permulaan, Anda dapat menggunakan perintah yang disarankan di bagian sebelumnya untuk memeriksa file keluaran Anda

Untuk membuat file UTF-8 sesuai keinginan Anda – dengan atau tanpa Byte Order Mark – Anda perlu mengetahui batasan VBA berikut

1. Perintah Print #1 tidak menyimpan di UTF-8, Anda akan kehilangan karakter Unicode Anda
Contoh
Buka “c. \Temp\tes. txt” Untuk Keluaran Sebagai #1
Cetak #1, “Ligne 1. Karakter Unicode yang sangat spesial. Ж = D0 96”

2. Perintah SavetoFile dari file “ADODB. Stream” selalu membuat BOM “EF BB BF” pada file UTF-8. Jangan mencari terlalu banyak. tidak ada opsi untuk menulis UTF-8 tanpa BOM tetapi kami akan memberi Anda solusi

Mengetahui dua batasan ini akan menghemat banyak penelitian

Di bawah ini adalah contoh kode yang memungkinkan Anda membuat dua file. aktif dengan BOM “EF BB BF” dan lainnya tanpa BOM

Sub Buat_UTF8()

Redupkan lStreamUTF8BOM, lStreamBinaireSansBOM Sebagai Objek
Atur lStreamUTF8BOM = CreateObject(“ADODB. Sungai kecil")
Atur lStreamBinaireSansBOM = CreateObject(“ADODB. Sungai kecil")

'Kami membuat Arus utama
lStreamUTF8BOM. Ketik = 2 '2 = Ketik Texte
lStreamUTF8BOM. Mode = 3 '3 = Mode Baca dan Tulis
lStreamUTF8BOM. Charset = “UTF-8” ‘format Unicode UTF-8 dengan BOM
lStreamUTF8BOM. Membuka

lStreamUTF8BOM. WriteText “Ligne 1. Karakter Unicode yang sangat spesial. Ж = D0 96” & vbCrLf
lStreamUTF8BOM. Tulis Teks “Ligne 2” & vbCrLf

'menyimpan sebagai UTF-8 dengan BOM
lStreamUTF8BOM. SaveToFile “c. \Temp\UTF8withBOM. txt", 2 '2 = timpa

'menyimpan sebagai UTF-8 tanpa BOM
lStreamBinaireSansBOM. Ketik = 1 '1 = aliran biner
lStreamBinaireSansBOM. Mode = 3 '3 = Mode Baca dan Tulis
lStreamBinaireSansBOM. Membuka
lStreamUTF8BOM. Posisi = 3
lStreamUTF8BOM. Salin Ke lStreamBinaireSansBOM

lStreamBinaireSansBOM. SaveToFile “c. \Temp\UTF8tanpaBOM. txt", 2 '2 = timpa
lStreamBinaireSansBOM. Menyiram
lStreamBinaireSansBOM. Menutup
lStreamUTF8BOM. Menyiram
lStreamUTF8BOM. Menutup

Akhir Sub

Untuk memeriksa hasilnya, Anda dapat membuka file di C. \TEMP\ menggunakan Powershell dan perintah fhx seperti yang ditunjukkan di bagian sebelumnya

Kami telah menunjukkan kepada Anda bagaimana pengkodean bekerja dan apa yang dibawa oleh revolusi UTF-8

Namun inkompatibilitas penyandian dapat tetap ada di antara aplikasi, jadi kami telah menawarkan beberapa alat untuk memeriksa format file Anda serta untuk berkonsultasi dengan Tanda Urutan Byte yang tidak terlihat. Selain itu, Anda sekarang tahu cara membuat beberapa file UTF-8 dengan atau tanpa BOM melalui VBA

Anda sekarang memiliki semua alat untuk membantu mendiagnosis kemungkinan masalah penyandian dan Anda dapat melakukannya hanya dengan menggunakan beberapa alat standar

Bagaimana cara menampilkan karakter Unicode di PHP?

Karakter cantik. .
Jika ini adalah kode PHP, jangan gunakan API mysql_* lama;

Bagaimana cara mengizinkan karakter khusus di PHP?

Tip. Untuk mengonversi entitas HTML khusus kembali ke karakter, gunakan fungsi htmlspecialchars_decode(). .
& (ampersand) menjadi &
" (tanda kutip ganda) menjadi "
' (kutipan tunggal) menjadi '
< (kurang dari) menjadi <
> (lebih besar dari) menjadi >

Cara mencetak UTF

PHP. utf8_encode() Fungsi . Unicode telah dikembangkan untuk mendeskripsikan semua kemungkinan karakter dari semua bahasa dan menyertakan banyak simbol dengan satu nomor unik untuk setiap simbol/karakter.

Bagaimana cara membaca karakter Cina di PHP?

Dukungan web PHP . Untuk melakukan itu, kode sebagai berikut. header("Jenis-Konten. teks/polos; . From there, you could safely assume when you print Chinese characters etc, it should be shown.