alhaos
Новичок
Кодировка Apache + PHP(oci8) + Oracle XE
Добрый.
У меня во такая хитрая связка. Все локально.
СУБД - Oracle Database 10g Express Edition Release 10.2.0.1.0
php - 5.3-win32-VC6-x86
ОС - Microsoft Windows [Версия 6.0.6002]
Веб - Apache 2.2
Учусь...
Делаю пример
Проблема с кодировкой, символы кириллицы выдает псевдографикой.
В базе используя internal_use поставил кодировку CL8MSWIN1251
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'NLS_CHARACTERSET';
PROPERTY_VALUE
--------------------------------------------------------------------------------
CL8MSWIN1251
В реестре
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_XE\NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251
В систему добавит переменную окружения:
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
В хеде документа прописал
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
Ради интереса пробовал выполнял запросы через PowerShell, делал импорт данных в Excel кодировка нормальная.
Ни пойму, откуда ноги...?
-~{}~ 08.01.10 19:24:
Нашел
htmlentities($item, ENT_QUOTES) : " ")
Какого то вот эта функция кодирует не так...
Вместо
Работает на ура
-~{}~ 08.01.10 19:40:
точнее
htmlentities($item, ENT_QUOTES, 'cp1251')
нужно указать кодировку.
Добрый.
У меня во такая хитрая связка. Все локально.
СУБД - Oracle Database 10g Express Edition Release 10.2.0.1.0
php - 5.3-win32-VC6-x86
ОС - Microsoft Windows [Версия 6.0.6002]
Веб - Apache 2.2
Учусь...
Делаю пример
PHP:
<?php
$conn = oci_connect('webuser', 'pass', 'XE', 'CL8MSWIN1251');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Prepare the statement
$stid = oci_parse($conn, 'select t.fcomment from t_comments t');
if (!$stid) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "_") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
oci_free_statement($stid);
oci_close($conn);
?>
В базе используя internal_use поставил кодировку CL8MSWIN1251
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'NLS_CHARACTERSET';
PROPERTY_VALUE
--------------------------------------------------------------------------------
CL8MSWIN1251
В реестре
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_XE\NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251
В систему добавит переменную окружения:
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
В хеде документа прописал
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
Ради интереса пробовал выполнял запросы через PowerShell, делал импорт данных в Excel кодировка нормальная.
Ни пойму, откуда ноги...?
-~{}~ 08.01.10 19:24:
Нашел
htmlentities($item, ENT_QUOTES) : " ")
Какого то вот эта функция кодирует не так...
PHP:
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
foreach ($row as $item) {
echo $item;
}
}
PHP:
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
-~{}~ 08.01.10 19:40:
точнее
htmlentities($item, ENT_QUOTES, 'cp1251')
нужно указать кодировку.