Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

藏色散人
藏色散人asal
2021-09-01 09:03:022453semak imbas

ralat mysql emoji php adalah kerana pangkalan data tidak menyokong emotikon.

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Persekitaran pengendalian artikel ini: sistem Windows 7, versi PHP7.1, komputer Dell G3

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php?

Apabila membuat program kecil, adalah berguna untuk menyimpan WeChat pengguna nama dan maklumat lain ke dalam pangkalan data sebagai Rujukan rekod amalan, tetapi mendapati bahawa apabila terdapat ungkapan emoji dalam nama WeChat, ungkapan itu tidak boleh disimpan dalam medan pangkalan data. Apabila saya menggunakan pangkalan data akses sebelum ini, emotikon boleh disimpan terus dalam medan.

Penyelesaian masalah:

Pertama sekali: Saya menguji sama ada ia disebabkan oleh program PHP yang saya gunakan untuk menghantar kandungan dengan ekspresi emoji Kandungan yang diserahkan adalah biasa post was Terdapat ungkapan emojin.

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Seterusnya: Cuba masukkan data ini ke dalam pangkalan data. Selepas berjaya memasukkan ke dalam pangkalan data, saya mendapati bahawa ungkapan itu berubah kepada simbol ?

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Masalahnya pada dasarnya difahami pada ketika ini, iaitu pangkalan data saya tidak menyokong ungkapan ini.

Perhatian! Perhatikan! Nota: Ini adalah hasil daripada menjalankannya dengan alat sql-front, tetapi menjalankannya dalam program PHP boleh menyebabkan semua kandungan di sebalik ungkapan emoji tidak disimpan secara normal. Contohnya:

["Emoji" title] Simbol emoji berada di permulaan kandungan dan kandungan yang disisipkan terus kosong,

[Tajuk "Emoji" di hadapan] Kandungan yang disisipkan ialah [Depan],

Ekspresi emoji dan kandungan di sebalik ungkapan emoji tidak boleh disisipkan seperti biasa.

Penyelesaian:

Kaedah 1: Saya menyemak dalam talian dan mengatakan bahawa ia adalah untuk menukar pengekodan set aksara pangkalan data Cuba tukar set aksara kepada utfmb4. Masukkan sekeping data lain dan lihat bahawa ungkapan itu memang disimpan dalam pangkalan data.

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Perlu diambil perhatian bahawa walaupun set aksara pangkalan data ditukar, program PHP mesti menukar set aksara dengan sewajarnya. Jika tidak masih???.

Kaedah takrifan ialah: mysqli_query($conn,"SET NAMES UTF8MB4");

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Kaedah 2: Melarikan diri daripada ekspresi emoji dan tukarkannya apabila memanggil pergi balik. Ia tidak lebih daripada mentakrifkan dua fungsi, satu untuk melarikan diri dan satu untuk anti melarikan diri. //emoji escaping

function en_emoji($str){
$en_str='';
$length=mb_strlen($str,'utf-8');
for($i=0;$i=4){
$en_str.=''.rawurlencode($tmp_str).'';
}else{
$en_str.=$tmp_str;
}
}
return $en_str;
}
//反转义为emoji
function de_emoji($str){
$de_str=preg_replace_callback('|(.*?)|',function($matches){
return rawurldecode($matches[1]);
},$str);
return $de_str;
}

juga sangat mudah untuk digunakan. Hanya melarikan data apabila menyimpannya ke pangkalan data, dan kemudian membalikkannya apabila membacanya untuk paparan. Hasilnya selepas

en_emoji($str) ialah:

Bagaimana untuk menyelesaikan masalah ralat mysql emoji php

Gunakan de_emoji($str) semasa membaca dan memaparkan, dan itu sahaja.

Perbandingan dua penyelesaian:

Kaedah 1: Ubah suai set aksara, bukan sahaja pangkalan data, tetapi juga kod program. Tetapi bagaimana untuk meletakkannya, pangkalan data mungkin dinaik taraf kepada utf8mb4 pada masa hadapan.

Kaedah 2: Menggunakan fungsi, anda hanya perlu mengubah suai program dan tidak perlu menyentuh pangkalan data. Dua fungsi dilaksanakan. Tetapi berbanding dengan kandungan dalam pangkalan data, rasanya seperti beberapa aksara yang kacau. Dan semasa saya menulis artikel ini, saya mendapati bahawa kerana en_emoji telah digunakan semasa menyimpan data, semua ungkapan menjadi kod melarikan diri Apabila saya menggunakan anti-escape de_emoji apabila memaparkan kandungan artikel, kali ini Kemudian saya mendapati bahawa kandungan melarikan diri yang saya asalnya. ingin menyatakan dalam artikel saya juga telah de-escaped. Anda boleh lihat bahawa saya hanya boleh menggunakan gambar untuk menggantikan prestasi keputusan saya di atas.

Kesimpulan: Gunakan lebih sedikit emoji. Ia juga menyusahkan Sudah tentu, jika anda membuat pangkalan data sendiri dan menulis program itu sendiri, adalah lebih sempurna untuk menyediakan utf8mb4 menggunakan kaedah satu. Tetapi secara jujur, saya hanya menggunakan fungsi melarikan diri semasa menulis artikel ini, dan menyahaktifkannya selepas menulis untuk mengelakkan masalah yang tidak perlu.

Disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah ralat mysql emoji php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn