Oracle oci_connect AL32UTF8 php utf8 奇怪的字符

Oracle oci_connect AL32UTF8 php utf8 weird characters

我已经摸不着头脑了一段时间,我希望有人能把我推向正确的方向。

我有一个 Oracle 数据库,其中包含姓名、姓氏等帐户信息,如果我 运行 以下(伪)代码:

<?php

$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myHost)(PORT=myPort)))(CONNECT_DATA=(SERVICE_NAME=myServiceName)))"; 

oci_connect("user","pass",$db,'AL32UTF8');

$query="

SELECT

//tried this
lastname AS LAST_NAME

//tried this:
(convert(lastname,'AL32UTF8')) AS LAST_NAME

FROM
    SomeDb
WHERE
    SomeId = 1234 
";

$stid = oci_parse($c1, $query);
oci_execute($stid);

$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);

echo $row['LAST_NAME']; //returns �¼

echo utf8_decode($row['LAST_NAME']); // returns ür

echo utf8_encode($row['LAST_NAME']); // returns ���¼

它 returns ü 个字符返回为:Ã�¼,而 ë 个字符正在正确显示。

我检查了 Oracle 服务器的 NLS_CHARACTERSET 设置为:AL32UTF8

我还检查了 Apache 字符集配置:

curl -A "Mozilla/4.0" http://localhost -I

HTTP/1.1 200 OK
Date: Tue, 05 Sep 2017 13:08:01 GMT
Server: Apache/2.4.10 (Debian) 
Content-Type: text/html; charset=UTF-8

我试过设置内码:

mb_internal_encoding("UTF-8"); // this seemed to be default UTF-8.

我尝试了几个 setenv 值,但似乎没有任何效果。可能是什么问题呢?我是不是忽略了什么?

附加信息:

PHP -v  
PHP 5.6.30-0+deb8u1

OCI8
OCI8 Version 2.0.8

此外;我尝试了以下代码来找到正确的编码,它总是给我 UTF-8。如果我将 UTF-8 移到数组的后面,它总是给我 ISO-8859-1。结果没用。

$encodings= array( 'UTF-8', 'ASCII', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 
        'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10', 
        'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16', 
        'Windows-1251', 'Windows-1252', 'Windows-1254');

echo mb_detect_encoding($string, $encodings, true);

进一步研究没有找到原因或解决方案,所以我决定将 Oracle 数据库中的源字符调整为正确的字符。

我知道这不是我真正想要的解决方案,但由于显示这种奇怪翻译的字符数量非常少,所以这是最快的解决方案。

感谢所有和我一起思考的人。

此致,

弗兰斯