我不知道我可能会错过,但目前这一工作的代码我能够从db表连接,查询并返回结果正常。PHP 5.6 - 使用PDO,并指定字符集的Oracle数据库连接/编码
但如何能证明从表中以正确的编码的结果?因为像ç,á这样的特殊字符有时会显示为问号或方形框。
波纹管,我到目前为止所有的信息,但我相信定义必须在PDO上设置,因为如果我只是在页面上做一个echo "ç -á";,字符将正确显示。
甲骨文11表字符集:
查询:SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;
结果:WE8MSWIN1252
php.ini文件编码设置:
default_charset = "UTF-8"
internal_encoding = "UTF-8"
input_encoding = "UTF-8"
output_encoding = "UTF-8"
代码例如:
#
# PDO Connect example
#
$tns = "
(DESCRIPTION=
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA=
(SID=the_database)
)
)
";
$username = "x";
$password = "x";
try {
$conn = new PDO("oci:dbname=" . $tns, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
#
# Fetch results and build html table
#
$sql = "select * table";
$result = $conn->query($sql);
echo '
echo '';
echo '
';echo '
Info';echo '
';echo '
';echo '
';foreach ($conn->query($sql) as $row) {
echo '
';echo '
' . $row['INFO'] . '';echo '
';}
echo '
';echo '
';+0
看起来像你的表字符集是windows 1252(基本上拉丁8859-1);你也需要你的表使用UTF8。 –
+0
@ CD001我相信我需要改变php方面,因为不允许更改表格的字符集。所以,我会尝试更新PHP端到拉丁文,看它是否会起作用。我不确定这是否是正确的方向,请您详细说明,以便我能更好地理解? =) –
+0
这应该工作 - 你非常想在这里照做:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through/279279 ......但切换一切' ISO-8859-1'(Windows 1252是它的一个子集,所以它应该没问题)。 –