Maison  >  Article  >  développement back-end  >  Que dois-je faire si php lit des caractères tronqués dans la base de données Python ?

Que dois-je faire si php lit des caractères tronqués dans la base de données Python ?

PHPz
PHPzoriginal
2023-03-31 10:08:05637parcourir

Lors de la connexion de PHP à une base de données Python, si des problèmes de caractères tels que des caractères tronqués surviennent, cela peut être dû aux raisons suivantes :

1. Encodage incohérent : lorsque PHP se connecte à une base de données Python, un encodage incohérent entraînera une transmission de données parfois tronquée. des personnages apparaissent.

2. Encodage par défaut de la base de données Python : l'encodage par défaut de Python est utf-8, tandis que PHP utilise ISO-8859-1 pour l'encodage. Lorsque PHP se connecte à une base de données Python, si le format d'encodage n'est pas défini, le format d'encodage par défaut sera utilisé, ce qui entraînera des données tronquées lors de la transmission des données.

En réponse aux problèmes ci-dessus, nous pouvons utiliser les méthodes suivantes pour les résoudre.

Méthode 1. Spécifier le format d'encodage

Lorsque PHP établit une connexion à la base de données Python, nous pouvons spécifier le format d'encodage. Cette méthode convient aux situations où les formats d'encodage sont incohérents. Le format d'encodage peut être spécifié en PHP à l'aide de la fonction mysqli_set_charset().

Par exemple :

$db = mysqli_connect("host", "username", "password", "database");

mysqli_set_charset($db, "utf8");

Définissez utf8 comme format d'encodage.

En Python, vous pouvez également définir le format d'encodage. Lorsque vous utilisez le connecteur Python MySQL, vous pouvez spécifier le format d'encodage lors de l'établissement de la connexion. Par exemple :

import mysql.connector

cnx = mysql.connector.connect(user='[username]', password='[password]', host='[hostname]', database='[databasename]', charset='utf8')

Utilisez charset='utf8' pour spécifier le format d'encodage.

Méthode 2 : Utiliser l'encodage unicode_escape

Lorsque le format d'encodage du programme PHP et du programme Python sont incohérents, vous pouvez utiliser la méthode d'encodage unicode_escape. En Python, vous pouvez utiliser la fonction repr() pour convertir le résultat en chaîne brute, puis utiliser la fonction stripslashes() en PHP pour le restaurer.

Par exemple :

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()

En PHP, vous pouvez utiliser :

$string = addslashes('a string that "needs" to be escaped! \x99');

echo stripcslashes($string);

Méthode 3. Utilisez la fonction mb_convert_encoding()

mb_convert_encoding() pour convertir l'encodage vers une autre méthode d'encodage. Lorsque les formats d'encodage du programme PHP et du programme Python sont incohérents, les données lues peuvent être encodées et converties à l'aide de la fonction mb_convert_encoding().

Par exemple :

$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);

La méthode ci-dessus peut résoudre efficacement le problème tronqué lorsque PHP se connecte à la base de données Python. Lors de l'utilisation, vous devez choisir la méthode la plus appropriée en fonction de la situation réelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn