Привет, это последующие квесты со вчерашнего дня,
У меня есть php-скрипт, который анализирует веб-сайт. Я получаю строки в UTF-8, теперь я хочу вставить эти строки в свою базу данных Oracle, которая использует:
NLS_NCHAR_CHARACTERSET = AL16UTF16
NLS_CHARACTERSET = EE8ISO8859P2
Я пробовал:
$rep = iconv("UTF-8","AL-16UTF-16",$string);
//FAILS - производит?? в базе данных или сценариях с ошибкой "неправильная кодировка"
Я также пробовал
$rep = iconv("UTF-8","ISO-8859-2",$string);
$rep1 = iconv("UTF-8","AL-16UTF-16",$rep);
то же, что и выше... не удается с?? в базе данных.
Кто-нибудь знает, что мне делать дальше?
Драйвер OCI неявно обрабатывает преобразование набора символов. При подключении убедитесь, что ваша кодировка установлена как UTF-8
:
oci_connect($username, $password, $connection_string, 'UTF-8');
Это говорит OCI ожидать, что вы предоставите строки в формате UTF8 и предоставите результирующие объекты в UTF8, преобразованные из кодировки базы данных. Из руководства (внимание мое):
Определяет набор символов, используемый библиотеками Oracle Client. Набор символов не обязательно должен соответствовать набору символов, используемому базой данных. Если он не соответствует, Oracle сделает все возможное, чтобы преобразовать данные в набор символов базы данных и из него. В зависимости от набора символов это может не дать полезные результаты. Преобразование также добавляет некоторые накладные расходы.
Это означает, что строки, которые вы хотите ввести, находятся в UTF8, что вам вообще не нужно использовать iconv()
. Просто пусть OCI справится с этим для вас.
iso-8859-2' to
EE8ISO8859P2