0
我不知道我可能會錯過,但目前這一工作的代碼我能夠從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 '<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
@ CD001我相信我需要改變php方面,因爲不允許更改表格的字符集。所以,我會嘗試更新PHP端到拉丁文,看它是否會起作用。我不確定這是否是正確的方向,請您詳細說明,以便我能更好地理解? =) –
這應該工作 - 你非常想在這裏照做:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through/279279 ......但切換一切' ISO-8859-1'(Windows 1252是它的一個子集,所以它應該沒問題)。 – CD001