Maison >développement back-end >Problème PHP >Comment définir l'encodage Oracle en php
Comment définir l'encodage Oracle en PHP : 1. Obtenez le jeu de caractères d'Oracle ; 2. Exécutez "select * from V$NLS_PARAMETERS;" 3. Convertissez l'encodage via la fonction iconv.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Comment définir l'encodage Oracle en php ?
php se connecte à Oracle pour définir le jeu de caractères à éviter caractères tronqués
Utilisez Oracle pour la base de données, 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 :
$c1 = oci_connect("scott", "tiger", $db, 'zhs16gbk');
Mes fichiers PHP locaux utilisent utf-8, le code obtenu doit donc subir la conversion d'encodage suivante :
while ($dat = oci_fetch_row($cur)) { print_r(iconv('gb2312', 'utf-8', $dat[0])); }
Mise à jour :
Des collègues ont dit qu'Oracle peut être spécifié par le client. le jeu de caractères fournit des données. 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.
$c1 = oci_connect("scott", "tiger", $db, 'UTF8');
De plus, il y a un problème étrange : l'iconv converti par l'encodage précédent est normal dans l'environnement de la machine de test, mais il ne peut pas être analysé normalement lorsqu'il est transmis à l'emplacement distant. Plus tard, il a été remplacé par mb_convert_encoding. est la suivante :
$nickname = mb_convert_encoding($dat[0], 'utf-8', 'gbk');
La raison possible est que 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
De plus, je joins une méthode auto-packagée d'interrogation des données Oracle en PHP DingSql :
/** * 封装接入oracle 执行sql语句查询 * @param sql * @return false or string or array(array()) * @author xzz 2018年5月5日上午9:38:54 */ function DingSql($sql = ''){ header("Content-type: text/html; charset=utf-8"); if(!$sql) return false; $conn= oci_connect('name', 'passwd', 'IP:PORT/serverName','zhs16gbk'); if($conn) { $stid = oci_parse($conn, $sql); // 配置SQL语句,准备执行 if (!$stid) { $e = oci_error($conn); print htmlentities($e['message']); exit; } $r = oci_execute($stid, OCI_DEFAULT); // 执行SQL。OCI_DEFAULT表示不要自动commit if(!$r) { $e = oci_error($stid); echo htmlentities($e['message']); exit; } $kkk = []; $i = '-1'; while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {//返回关联数据并创建null $i++; foreach($row as $key => $item) { $kkk[$i][$key] = iconv("gb2312", "utf-8//TRANSLIT", $item); } } oci_close($conn); return $kkk; //二维关联数组 }else{ echo '连接oracle失败!';exit; } }
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!