【发布时间】:2017-06-10 03:02:48
【问题描述】:
我不确定我可能会丢失什么,但目前使用此工作代码我能够正确连接、查询和返回 db 表中的结果。
但是如何以正确的编码显示表格中的结果呢?因为像ç、á这样的特殊字符有时会像问号或方框一样显示。
Bellow,到目前为止我拥有的所有信息,但我认为必须在 PDO 上设置定义,因为如果我只是在页面上执行 echo "ç -á";,字符将正确显示。
Oracle 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 '<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>';
【问题讨论】:
-
看起来您的表格字符集是 Windows 1252(基本上是拉丁语 8859-1);您还需要您的表格使用 UTF8。
-
@CD001 我相信我需要更改 php 端,因为不允许更改表的字符集。所以,我会尝试将 php 端更新为拉丁文,看看它是否可以工作。我不确定这是否是正确的方向,您能否详细说明一下,以便我能更好地理解? =)
-
这应该行得通 - 你很想听从这里的建议:stackoverflow.com/questions/279170/utf-8-all-the-way-through/… ...但将所有内容切换到
ISO-8859-1(Windows 1252 是其中的一个子集,所以应该没问题)。 -
你解决过这个问题吗?
-
@KaKa 遗憾的是,我没有环境来测试这个了,但好消息是,我已获准将整个解决方案迁移到 Django。所以之前的解决方案被停止了。