我不确定我可能缺少什么,但是目前使用这个工作代码我能够正确连接,查询和返回db表中的结果。
但是如何用正确的编码显示表中的结果?因为像ç,á这样的特殊字符有时会显示为问号或方框。
贝娄,我到目前为止所有的信息,但我相信必须在PDO上设置定义,因为如果我只是在页面上执行echo "ç -á";
,则字符将正确显示。
Oracle 11 Table charset:
查询: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 '<table>';
echo '<thead>';
echo '<tr>';
echo '<th>Info</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
foreach ($conn->query($sql) as $row) {
echo '<tr>';
echo '<td >' . $row['INFO'] . '</td>';
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
答案 0 :(得分:0)
将:charset=utf8
添加到DSN字符串的末尾应该会导致:
由于您说这些特殊字符的原始echo
确实在您的浏览器中正确显示,因此您的“查看器”设置(浏览器)很可能会回显返回的UTF-8字符应该成功。< / p>