【发布时间】:2017-01-24 21:27:34
【问题描述】:
当我尝试使用 PHP odbc_connect() 通过 ODBC 数据源连接到 Oracle 时,我无法获得 UTF-8 支持。
所有这些都是在 32 位下完成的。我正在使用 oracle XE DB 进行测试和 instaclient11_2 32 位驱动程序,ODBC 数据源 32it +放置在 WAMP32 位服务器上。
尽管我使用 Oracle 12c DB 和客户端 Home 10g 32 位驱动程序的结果相同。
@TODAY 使用 64 位 instanclient 驱动程序测试了这一切,在 64 位 WAMP 服务器上添加了 ODBC 64DataSource。仍然没有正确显示字符的运气......
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
$connect = odbc_connect("XEXDB", "username", "password");
$query = "SELECT col, 'čaļi' FROM TESST";
$result = odbc_exec($connect, $query);
while(odbc_fetch_row($result)){
$name = odbc_result($result, 1);
$surname = odbc_result($result, 2);
echo "$name, $surname <br/>";
}
odbc_close($connect);
?>
我从这段代码得到的结果:
?A?IS, A?aA?i
Gunt?rs Salts, A?aA?i
但应该是:
ĶAĶIS, čaļi
Guntārs Šalts, čaļi
我找不到如何为odbc_connect() 编写$dsn 来强制charset=utf-8,到目前为止还没有运气使用charset=utf-8 工作$conn_string。
还尝试使用utf8_encode() 和utf8_decode()(使用这个让我绝望了)。
有没有人遇到过类似的问题,或者有人有什么建议我可以试试?
【问题讨论】:
-
像您的 Oracle 这样的锁返回正确的 UTF-8(因为它显示 2 个字符而不是 1 个)- 专注于显示问题。尝试
echo "čaļi";很可能它也不起作用,在这种情况下,问题与 Oracle 无关。 -
@WernfriedDomscheit 我已经尝试过了,它会正确显示其他内容,你可以建议,因为我没有选择。没有提到我测试的所有内容,但我做了很多。