Maison >développement back-end >Problème PHP >Comment définir l'encodage lors de la connexion de PHP à Oracle
Comment définir l'encodage lors de la connexion à Oracle en PHP : récupérez d'abord le jeu de caractères d'Oracle ; puis définissez le code PHP sur "oci_connect("scott", "tiger", $db, 'zhs16gbk');".
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Comment paramétrer l'encodage lors de la connexion à Oracle avec PHP ?
PHP se connecte à Oracle pour définir le jeu de caractères afin d'éviter les caractères tronqués
La base de données utilise Oracle Lorsque PHP se connecte à Oracle, il est préférable de spécifier le jeu de caractères.
Vérifiez le manuel PHP, le quatrième paramètre de oci_connect est charset, c'est la clé.
Récupérez d'abord le jeu de caractères d'Oracle et exécutez "select * from V$NLS_PARAMETERS;". La variable NLS_CHARACTERSET correspond au jeu de caractères dont nous avons besoin. Par exemple, ici c'est "ZHS16GBK". Par conséquent, le code PHP final est :
Code Php
$c1 = oci_connect("scott", "tiger", $db, 'zhs16gbk'); $c1 = oci_connect("scott", "tiger", $db, 'zhs16gbk');
Mes fichiers PHP locaux utilisent utf-8, donc le code obtenu doit être converti comme suit :
Code Php
while ($dat = oci_fetch_row($cur)) { print_r(iconv('gb2312', 'utf-8', $dat[0])); } while ($dat = oci_fetch_row($cur)) { print_r(iconv('gb2312', 'utf-8', $dat[0])); }
- --- -------------------------------
MISE À JOUR
-------------- -------------------
Un collègue a déclaré qu'Oracle peut fournir des données selon le jeu de caractères spécifié par le client. En d'autres termes, si mon fichier PHP local utilise UTF-8, alors lorsque j'utilise oci_connect, je peux directement spécifier utf-8, et même la conversion d'encodage sera enregistrée.
Code Php
$c1 = oci_connect("scott", "tiger", $db, 'UTF8'); $c1 = oci_connect("scott", "tiger", $db, 'UTF8');
De plus, il y a un problème étrange : l'iconv précédemment converti en encodage est normal dans l'environnement de la machine de test, mais il ne peut pas être analysé correctement lorsqu'il est transmis à l'emplacement distant. remplacé par mb_convert_encoding. Le code est le suivant :
Code Php
$nickname = mb_convert_encoding($dat[0], 'utf-8', 'gbk'); $nickname = mb_convert_encoding($dat[0], 'utf-8', 'gbk');
La raison possible est si "//IGNORE" est ajouté au deuxième paramètre dans iconv, veuillez vous référer à http://cn2.php.net /manual/en/function.iconv.php. Si vous êtes intéressé, vous pouvez l'essayer, mais je ne l'essaierai pas
Apprentissage recommandé : "Tutoriel vidéo PHP"
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!