gpt4 book ai didi

php-oci8编码问题

转载 作者:可可西里 更新时间:2023-11-01 00:48:17 25 4
gpt4 key购买 nike

有人问过类似的问题,但常规解决方案对我不起作用。可能我错过了什么。我快要失去理智了:(((

正如您从标题中所理解的那样,我有一个包含非 ascii 内容的 oracle 数据库。我想使用 oci8 使用 php 查询/显示它。

首先数据库是ISO8859P9,即查询

select parameter, value from v$nls_parameters where parameter in ('NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY')

返回

NLS_LANGUAGE        AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSER WE8ISO8859P9

所以我相应地设置了 NLS_LANG 变量,即 getenv("NLS_LANG") 返回“AMERICAN_AMERICA.WE8ISO8859P9”。

我插入了 AddDefaultCharset ISO-8859-9到/etc/apache2/conf.d/charset 文件,我总是包含 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9">在 php 文件的 html 内容的头部。因此,当我通过 Firebug 检查时,我看到响应的“Content-Type” header 是“text/html;charset=ISO-8859-9”。

最后,我有一行 default_charset = "ISO-8859-9"在/etc/php5/apache2/php.ini 文件中,以及输出 phpinfo() 的核心部分,我看到 default_charset 是 ISO-8859-9。

在所有这些之后,当我检索到一个带有字符 İ 的字符串时在其中并回显它,它显示为“?”。那就是问题所在!!!当我查询 select dump(nameofthatstring, 16)... , 我看到它的字节值为 DD,即根据 8859-9 正确。

我不确定它是否相关,但我会给出最后的细节:当我输入一个字符时 ı在一个表单中通过ajax在GET中提交,它被转换为%FD,即8859-9对应的值,没有问题。

当我对其进行 urldecode 并回显时,它再次正常,我看到 ı .但是当我查询一个包含 ı 的字符串时在其 where 子句中(在收到 ajax 请求后),它返回空集。

但是,如果我使用 CHR(253) 选择行,这些行会被正确选择,但再次打印这些行会导致“?”字符。

我真的被困住了。任何帮助将不胜感激。提前致谢。

编辑:

$database = "(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)) (CONNECT_DATA= (SERVER=dedicated)(SERVICE_NAME=sname)))";

首先,我试过这个:

oci_pconnect($username, $password, $database, "AMERICAN_AMERICA.WE8ISO8859P9");

但是并没有解决,所以我设置了NLS_LANG变量,改成如下:

oci_pconnect($username, $password, $database);

没有任何改变...

最佳答案

尝试这样连接:

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9");
$db = "(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)
(HOST=$dbhost)(PORT=$dbport)
)
)
(CONNECT_DATA=(SID=$dbname))
)";
$conn = OCILogon($dbuser, $dbpasswd, $db);

根据您的配置设置变量 $db*

关于php-oci8编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com