Apabila menyambungkan PHP ke pangkalan data Python, jika masalah aksara seperti aksara bercelaru berlaku, ia mungkin disebabkan oleh sebab berikut:
1 Pengekodan tidak konsisten: Apabila PHP menyambung ke pangkalan data Python, jika pengekodan Ketakkonsistenan akan membawa kepada data bercelaru semasa penghantaran data.
2. Pengekodan lalai pangkalan data Python: Pengekodan lalai Python ialah utf-8, manakala PHP menggunakan ISO-8859-1 untuk pengekodan. Apabila PHP menyambung ke pangkalan data Python, jika format pengekodan tidak ditetapkan, format pengekodan lalai akan digunakan, mengakibatkan data bercelaru semasa penghantaran data.
Untuk mengatasi masalah di atas, kita boleh mengambil kaedah berikut untuk menyelesaikannya.
Kaedah 1. Tentukan format pengekodan
Apabila PHP mewujudkan sambungan ke pangkalan data Python, kami boleh menentukan format pengekodan Kaedah ini sesuai untuk situasi di mana format pengekodan tidak konsisten. Format pengekodan boleh ditentukan dalam PHP menggunakan fungsi mysqli_set_charset().
Contohnya:
$db = mysqli_connect("host", "username", "password", "database"); mysqli_set_charset($db, "utf8");
Tetapkan utf8 sebagai format pengekodan.
Dalam Python, anda juga boleh menetapkan format pengekodan. Apabila menggunakan Python MySQL Connector, anda boleh menentukan format pengekodan semasa membuat sambungan. Contohnya:
import mysql.connector cnx = mysql.connector.connect(user='[username]', password='[password]', host='[hostname]', database='[databasename]', charset='utf8')
Gunakan charset='utf8' untuk menentukan format pengekodan.
Kaedah 2: Gunakan pengekodan unicode_escape
Apabila format pengekodan program PHP dan program Python tidak konsisten, anda boleh menggunakan kaedah pengekodan unicode_escape. Dalam Python, anda boleh menggunakan fungsi repr() untuk menukar hasilnya kepada rentetan mentah, dan kemudian gunakan fungsi stripslashes() dalam PHP untuk memulihkannya.
Contohnya:
import mysql.connector cnx = mysql.connector.connect(user='[username]', password='[password]', host='[hostname]', database='[databasename]') query = "SELECT * FROM [table] WHERE [column] = %s" cursor = cnx.cursor() cursor.execute(query, ("[value]".decode('unicode_escape'),)) result = cursor.fetchall()
Dalam PHP, anda boleh menggunakan:
$string = addslashes('a string that "needs" to be escaped! \x99'); echo stripcslashes($string);
Kaedah 3. Gunakan fungsi mb_convert_encoding()
mb_convert_encoding () Pengekodan boleh ditukar kepada pengekodan lain. Apabila format pengekodan program PHP dan program Python tidak konsisten, data baca boleh dikodkan dan ditukar menggunakan fungsi mb_convert_encoding().
Contohnya:
$db = mysqli_connect("host", "username", "password", "database"); $query = "SELECT * FROM [table] WHERE [column] = %s"; $stmt = mysqli_prepare($db, $query); mysqli_stmt_bind_param($stmt, "s", $value); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $column1, $column2); while (mysqli_stmt_fetch($stmt)) { $column1 = mb_convert_encoding($column1, "UTF-8", "auto"); $column2 = mb_convert_encoding($column2, "UTF-8", "auto"); echo $column1 . " " . $column2; } mysqli_stmt_close($stmt); mysqli_close($db);
Kaedah di atas boleh menyelesaikan masalah aksara bercelaru dengan berkesan apabila PHP menyambung ke pangkalan data Python. Semasa penggunaan, anda perlu memilih kaedah yang paling sesuai mengikut keadaan sebenar.
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika php membaca aksara yang kacau daripada pangkalan data python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!