Работа с eacute и другими специальными символами с использованием Oracle, PHP и Oci8

Привет, я пытаюсь сохранить имена в базе данных Oracle и получить их обратно, используя PHP и oci8.

Однако, если я вставлюé непосредственно в базу данных Oracle и использовать oci8, чтобы получить его обратно, я просто получаюe

Нужно ли кодировать все специальные символы (включаяé) в HTML-сущности (то есть:é) перед вставкой в ​​базу данных ... или я что-то упустил?

Спасибо

ОБНОВЛЕНИЕ: 1 марта в 18:40

нашел эту функцию:http://www.php.net/manual/en/function.utf8-decode.php#85034

function charset_decode_utf_8($string) {
    if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) {
        return $string;
    }
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);
$string = preg_replace("/([\300-\337])([\200-\277])/e","'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string);
return $string;
}

кажется, работает, хотя не уверен, что это оптимальное решение

ОБНОВЛЕНИЕ: 8 марта в 15:45

Набор символов Oracle - ISO-8859-1.
в PHP я добавил:

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1");

заставить соединение oci8 использовать этот набор символов. Получениеé Использование oci8 из PHP теперь работает! (заvarchars, но нетCLOBs Должен сделатьutf8_encode извлечь его)
Затем я попытался сохранить данные из PHP в Oracle ... и это не сработало ... где-то на пути от PHP к Oracleé становится?

ОБНОВЛЕНИЕ: 9 марта в 14:47

Итак, все ближе. После добавления переменной NLS_LANG выполните прямые вставки oci8 сé работает.

Проблема на самом деле на стороне PHP. Используя среду ExtJs, при отправке формы она кодирует ее, используяencodeURIComponent.
Такé отправлено как%C3%A9 а затем перекодировать вé.
Однако его длина сейчас2 (strlen($my_sent_value) = 2) а не 1. А если в PHP я попробую: $ my_sent_value ==é = ЛОЖНЫЙ

Я думаю, что если мне удастся перекодировать все эти символы в PHP обратно в длину размером 1 байт, а затем вставить их в Oracle, это должно сработать.

Все же не повезло, хотя

ОБНОВЛЕНИЕ: 10 марта в 11:05

Я продолжаю думать, что я так близко (но так далеко).

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9"); работает очень спорадически.

Я создал небольшой PHP-скрипт для тестирования:

header('Content-Type: text/plain; charset=ISO-8859-1');
putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9");
$conn= oci_connect("user", "pass", "DB");
$stmt = oci_parse($conn, "UPDATE temp_tb SET string_field = '|é|'");
oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);

После выполнения этого один раз и входа в базу данных Oracle напрямую, я вижу, что STRING_FIELD установлен в|¿|, Очевидно, не то, что я ожидал от моего предыдущего опыта.
Однако, если я обновлю эту страницу PHP дважды быстро, это сработает !!!
В Oracle я правильно увидел|é|.

Кажется, что, возможно, переменная среды неправильно установлена ​​или отправлена ​​вовремя для первого выполнения сценария, но доступна для второго выполнения.

Мой следующий эксперимент - экспортировать переменную в среду PHP, однако для этого мне нужно сбросить Apache ... так что посмотрим, что произойдет, надеюсь, это сработает.