Pangkas PHP aksara bercelaru adalah kerana fungsi rentetan dalam PHP tidak selamat berbilangbait secara lalai Penyelesaiannya adalah untuk merangkum fungsi mb_trim untuk menyelesaikan aksara bercelaru.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.4, komputer Dell G3.
Bagaimana untuk menyelesaikan masalah PHP memangkas aksara bercelaru?
Pangkas PHP memintas aksara bercelaru
Sentiasa gunakan Trim untuk menapis rentetan pada permulaan dan akhir Penerangan rasmi Trim:
trim — Alih keluar aksara kosong (atau aksara lain) pada permulaan dan akhir rentetan
Saya menemui masalah yang sangat pelik hari ini:
<?php $str = '研发、产品、'; echo trim($str, '、');
Tebak ini akan kembali? "R&D, produk"? TIDAK, yang ini pelik kembali ke "R&D dan pengeluaran".
Mungkinkah kaedah pembukaan saya salah?
Selepas beberapa ujian, saya mendapati masalah yang sangat menarik.
<?php echo trim('abacabb', 'ab'); //print 'c'
Saya pada asalnya menyangka ini akan mengembalikan acabb, tetapi ia hanya mengembalikan c. Ini adalah salah faham tentang fungsi pemangkasan.
Sebenarnya, contoh ini tersedia dalam dokumentasi rasmi, tetapi saya tidak mempedulikannya.
trim akan melingkari aksara pertama rentetan. Seperti dalam contoh di atas, proses pelaksanaan adalah seperti berikut:
Rentetan abacabb akan mula bergelung daripada subskrip 0. Jika aksara dalam ab wujud, ia akan dialih keluar Gelung akan berhenti apabila tiada aksara dalam ab.
Jadi pelaksanaannya ialah:
gelung a wujud dalam rentetan ab, keluarkannya, tinggalkan bacabb
gelung b wujud Dalam rentetan ab, keluarkannya, tinggalkan acabb
gelung a wujud dalam rentetan ab, keluarkannya, tinggalkan cabb
gelung c tidak Ia wujud dalam rentetan ab dan menghentikan gelung, jadi selepas mengalih keluar aksara pertama, apa yang kekal: cabb.
Tetapi trim menapis aksara pertama dan terakhir, jadi ia juga akan dialih keluar dari hujung dalam gelung.
Gelung b wujud dalam rentetan ab, keluarkannya dan teksi ditinggalkan
Gelung b wujud dalam rentetan ab, keluarkannya dan. teksi tinggal ca,
gelung a wujud dalam rentetan ab, keluarkannya, tinggalkan c,
gelung c tidak wujud dalam rentetan ab, gelung henti, jadi mengalih keluar aksara terminal meninggalkan: c.
Jadi selepas semuanya selesai, abacabb tinggal dengan c. Lihat di sini anda mempunyai sedikit pemahaman tentang fungsi trim.
Baiklah, mari kita bincangkan tentang masalah kod bercelaru.
Ini kerana dalam PHP, fungsi rentetan tidak selamat berbilangbait secara lalai. Jika anda memerlukan multibait-selamat, anda perlu menggunakan siri mb_ fungsi.
Kod heksadesimal bagi "," ialah 0xe3 0x80 0x81 Fungsi yang tidak selamat berbilangbait akan menganggapnya sebagai tiga aksara.
Kod perenambelasan "品" ialah 0xe5 0x93 0x81. 0x81 terakhir di sini hanya sepadan dan ditapis. Ini akan membawa kepada watak bercelaru.
ok, masalah telah dijumpai, trim tidak mempunyai fungsi mb, tetapi kita boleh merangkumnya sendiri. Fungsi mb_trim.
PS: Saya telah menggunakan trim untuk masa yang lama, tetapi saya tidak pernah benar-benar memahaminya. Ia masih penting untuk membaca dokumentasi rasmi.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah PHP memangkas aksara bercelaru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!