解決mysql php亂碼問(wèn)題:1、建立數(shù)據(jù)庫(kù)表時(shí)指定數(shù)據(jù)庫(kù)表的字符集;2、設(shè)置mysql的字符集;3、連接數(shù)據(jù)庫(kù)后,設(shè)置數(shù)據(jù)庫(kù)間傳輸字符時(shí)所用的默認(rèn)字符編碼;4、設(shè)置html頁(yè)面使用的字符集。
php讀mysql時(shí),有以下幾個(gè)地方涉及到了字符集。
1.?建立數(shù)據(jù)庫(kù)表時(shí)指定數(shù)據(jù)庫(kù)表的字符集。例如
create table tablename ( id int not null auto_increment, title varchar(20) not null, primary key ('id') )DEFAULT CHARSET =UTF8;
如果在創(chuàng)建表時(shí)沒(méi)有指定表的字符集,則使用表所屬的數(shù)據(jù)庫(kù)的默認(rèn)字符集。該字符集由character_set_database指定。
查看數(shù)據(jù)庫(kù)表所使用的字符集的方法是:
show create table mytable;
(PS:建立數(shù)據(jù)庫(kù)/表和進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)盡量顯式指出使用的字符集,而不是依賴于MySQL的默認(rèn)設(shè)置,否則MySQL升級(jí)時(shí)可能帶來(lái)很大困擾[1])
2. mysql的字符集
mysql中有三個(gè)重要的變量,character_set_client,character_set_results,character_set_connection。
通過(guò)設(shè)置character_set_client,告訴Mysql,PHP存進(jìn)數(shù)據(jù)庫(kù)的是什么編碼方式。
通過(guò)設(shè)置character_set_results,告訴Mysql,PHP需要取什么樣編碼的數(shù)據(jù)。
通過(guò)設(shè)置character_set_connection,告訴Mysql,PHP查詢中的文本,使用什么編碼。
3. 連接數(shù)據(jù)庫(kù)后,設(shè)置數(shù)據(jù)庫(kù)間傳輸字符時(shí)所用的默認(rèn)字符編碼。
使用mysqli::set_charset()或mysqli::query('set names utf8'),進(jìn)行設(shè)置。
盡量使用mysqli::set_charset(mysqli:set_charset)而不是”SET NAMES”(參考這篇文章)
$db = new mysqli('localhost','user','passwd','database_name');$db->set_charset('utf8');
注意是utf8,不是utf-8
(這里有個(gè)問(wèn)題就是,數(shù)據(jù)庫(kù)和php都已經(jīng)統(tǒng)一了編碼,但是如果沒(méi)有調(diào)用mysqli::set_charset()函數(shù)時(shí),讀出數(shù)據(jù)時(shí)仍然會(huì)出現(xiàn)亂碼。這是為什么?)
(另,set names utf8相當(dāng)于下面三句
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
)
4. html頁(yè)面使用的字符集。在meta標(biāo)簽中設(shè)置
<meta http-equiv="content-type" content="text/html; charset=utf-8">
5. php文本文件所使用的字符集。
在linux下可以用vim打開(kāi)文件,輸入
:set encoding
查看文件使用的字符集
要保證不亂碼,需要保證文件自身的編碼,HTML里指定的編碼,PHP告訴Mysql的編碼(包括character_set_client和character_set_results)統(tǒng)一。同時(shí)使用mysqli:set_charset()函數(shù)或”SET NAMES”。
針對(duì)“3”后面的問(wèn)題,寫(xiě)了幾個(gè)例子,測(cè)試鏈接數(shù)據(jù)庫(kù)后,設(shè)置和不設(shè)置字符集時(shí)的結(jié)果。測(cè)試環(huán)境Ubuntu 12.04,MySQL 5.5,php 5.5.7。
結(jié)果如下:
(1) 數(shù)據(jù)庫(kù)表字符集是utf8,不使用set names utf8
能正常插入、讀出中文,但是在mysql中顯示亂碼
(2) 數(shù)據(jù)庫(kù)表字符集是utf8,使用set names utf8
能正常插入、讀出中文,mysql中顯示正確
(3) 數(shù)據(jù)庫(kù)表字符集不是utf8,使用set names utf8
mysql中顯示,讀出都是問(wèn)號(hào)。
很多相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn)PHP中文網(wǎng)!
Atas ialah kandungan terperinci 總結(jié)mysql php亂碼問(wèn)題. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam PHP, anda boleh menggunakan kurungan persegi atau pendakap keriting untuk mendapatkan aksara indeks spesifik rentetan, tetapi kurungan persegi disyorkan; Indeks bermula dari 0, dan akses di luar julat mengembalikan nilai null dan tidak dapat diberikan nilai; MB_SUBSTR dikehendaki mengendalikan watak multi-bait. Sebagai contoh: $ str = "hello"; echo $ str [0]; output h; dan watak -watak Cina seperti MB_SUBSTR ($ str, 1,1) perlu mendapatkan hasil yang betul; Dalam aplikasi sebenar, panjang rentetan perlu diperiksa sebelum gelung, rentetan dinamik perlu disahkan untuk kesahihan, dan projek berbilang bahasa mengesyorkan menggunakan fungsi keselamatan multi-bait secara seragam.

Untuk menetapkan dan mendapatkan pembolehubah sesi dalam PHP, anda mesti terlebih dahulu memanggil session_start () di bahagian atas skrip untuk memulakan sesi. 1. Apabila menetapkan pembolehubah sesi, gunakan $ _Session hyperglobal array untuk memberikan nilai kepada kekunci tertentu, seperti $ _Session ['username'] = 'john_doe'; Ia boleh menyimpan rentetan, nombor, tatasusunan dan juga objek, tetapi elakkan menyimpan terlalu banyak data untuk mengelakkan mempengaruhi prestasi. 2. Apabila mendapatkan pembolehubah sesi, anda perlu menghubungi session_start () terlebih dahulu, dan kemudian mengakses array $ _Session melalui kunci, seperti echo $ _Session ['username']; disyorkan untuk menggunakan isset () untuk memeriksa sama ada pembolehubah wujud untuk mengelakkan kesilapan

Kaedah utama untuk mencegah suntikan SQL dalam PHP termasuk: 1. Gunakan pernyataan pra -proses (seperti PDO atau MySQLI) untuk memisahkan kod dan data SQL; 2. Matikan mod preprocessing simulasi untuk memastikan pra -proses yang benar; 3. Penapis dan sahkan input pengguna, seperti menggunakan is_numeric () dan filter_var (); 4. Elakkan secara langsung splicing rentetan SQL dan gunakan parameter mengikat sebaliknya; 5. Matikan paparan ralat dalam persekitaran pengeluaran dan log ralat rekod. Langkah -langkah ini secara komprehensif menghalang risiko suntikan SQL dari mekanisme dan butiran.

Kaedah untuk mendapatkan ID sesi semasa dalam PHP adalah menggunakan fungsi session_id (), tetapi anda mesti menghubungi session_start () untuk berjaya mendapatkannya. 1. Panggil session_start () untuk memulakan sesi; 2. Gunakan session_id () untuk membaca ID Sesi dan mengeluarkan rentetan yang serupa dengan ABC123DEF456GHI789; 3 Jika pulangan kosong, periksa sama ada session_start () hilang, sama ada pengguna mengakses untuk kali pertama, atau sama ada sesi dimusnahkan; 4. ID Sesi boleh digunakan untuk pembalakan, pengesahan keselamatan dan komunikasi silang, tetapi keselamatan perlu diberi perhatian. Pastikan sesi itu diaktifkan dengan betul dan ID boleh diperolehi dengan jayanya.

Untuk mengekstrak substrings dari rentetan php, anda boleh menggunakan fungsi substr (), iaitu substra sintaks (string $ string, int $ start ,? int $ panjang = null), dan jika panjang tidak ditentukan, ia akan dipintas hingga akhir; Apabila memproses aksara berbilang bit seperti Cina, anda harus menggunakan fungsi MB_SUBSTR () untuk mengelakkan kod yang dihiasi; Jika anda perlu memintas rentetan mengikut pemisah tertentu, anda boleh menggunakan Eksploitasi () atau menggabungkan StrPOS () dan Substr () untuk melaksanakannya, seperti mengekstrak sambungan nama fail atau nama domain.

UnittestinginphpinvolvesveryingindividualcodeUnitsLikeFunctionsormethodstocatchbugsearlyandensurerurereliableFactoring.1) setupphpunitviacomposer, createatestdirectory, danconfigureautoloadandphpunit.xml.2soSteSteSteShpunit.xml.2)

Pelaksanaan pertanyaan pilih menggunakan pernyataan pra -proses PHP secara berkesan dapat mencegah suntikan SQL dan meningkatkan keselamatan. 1. Pernyataan preprocessing berasingan struktur SQL dari data, hantar templat terlebih dahulu dan kemudian lulus parameter untuk mengelakkan input jahat yang merosakkan dengan logik SQL; 2. PDO dan MYSQLI sambungan yang biasa digunakan dalam PHP menyedari pra -proses, di antaranya PDO menyokong pelbagai pangkalan data dan sintaks bersatu, sesuai untuk pemula atau projek yang memerlukan mudah alih; 3. Mysqli direka khas untuk MySQL, dengan prestasi yang lebih baik tetapi kurang fleksibiliti; 4. Apabila menggunakannya, anda harus memilih tempat letak yang sesuai (seperti? Atau nama tempat yang dinamakan) dan mengikat parameter melalui Execute () untuk mengelakkan SQL splicing secara manual; 5. Perhatikan kesilapan pemprosesan dan hasil kosong untuk memastikan keteguhan kod; 6. Tutupnya dalam masa selepas pertanyaan selesai.

Dalam PHP, kaedah yang paling biasa adalah untuk memecah rentetan ke dalam array menggunakan fungsi eksploit (). Fungsi ini membahagikan rentetan ke dalam pelbagai bahagian melalui pembatas yang ditentukan dan mengembalikan array. Sintaks adalah eksploit (pemisah, rentetan, had), di mana pemisah adalah pemisah, rentetan adalah rentetan asal, dan had adalah parameter pilihan untuk mengawal bilangan maksimum segmen. Contohnya $ str = "epal, pisang, oren"; $ arr = meletup (",", $ str); Hasilnya ialah ["Apple", "Bana
