powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle + PHP + кириллица. Не понимаю
25 сообщений из 40, страница 1 из 2
Oracle + PHP + кириллица. Не понимаю
    #34843556
Удаленно работаю с сервером Oracle. Пишу веб приложение на PHP.

Если коннекчусь к базе так OCILogon($Username,$Password, $Databasename); , то запрос Select comments from myTable вернет вопросики вместо русских букв.
Если при коннекте послать Charset: OCILogon($Username,$Password, $Databasename,"CL8MSWIN1251"); , в этом случае на страничке все отображается корректно.
Загвоздка в том что, не получается реализовать поиск по контенту таблицы, если в условии содержится кириллица.
Например Select comments from myTable where comments like '%к%' не вернет ничего, хотя буква "к" содержится в комментариях
а что-то вроде Select comments from myTable where comments like '%w%' вернет верный результат

select * from nls_database_parameters возвращает следующее:

NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET CL8MSWIN1251
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 9.2.0.4.0

Подскажите пожалуйста, что не так. Как исправить положение ? Что нужно сделать?
Неделю уже над этим бьемся. Если надо сделаем необходимые настройки на сервере.
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843579
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в поиск ходи - под *nix апач должен видеть переменую NLS_LANG до старата. пропиши NLS_LANG и наступит счастье
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843679
Искал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
Безрезультатно :(
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843687
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев ДмитрийИскал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
Безрезультатно :(
если бы прописал - работало бы
куда прописывал то ?
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843699
masteroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Твилинев ДмитрийНапример Select comments from myTable where comments like '%к%' не вернет ничего, хотя буква "к" содержится в комментариях
а в этом поле comments точно есть маленькая буква "к"? просто судя по настройкам у вас будет сравнение по кодам символов и "К"<>"к"
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843731
masteroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Твилинев Дмитрий
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET CL8MSWIN1251

авторесли бы прописал - работало бы
куда прописывал то ?
при NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 так и должно быть. так что правильно прописывал
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843787
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
masteroid
при NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 так и должно быть. так что правильно прописывал

что должно быть ? квадратики вместо рус букв ??
автор"Если коннекчусь к базе так OCILogon($Username,$Password, $Databasename);, то запрос Select comments from myTable вернет вопросики вместо русских букв."

апач явно не в курсе про переменую среды NLS_LANG
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843879
masteroid Твилинев ДмитрийНапример Select comments from myTable where comments like '%к%' не вернет ничего, хотя буква "к" содержится в комментариях
а в этом поле comments точно есть маленькая буква "к"? просто судя по настройкам у вас будет сравнение по кодам символов и "К"<>"к"
Буква конечно есть. А про "у вас будет сравнение по кодам символов и "К"<>"к"" не понял..
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34843961
iDesperado Твилинев ДмитрийИскал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
Безрезультатно :(
если бы прописал - работало бы
куда прописывал то ?

Прописывали в apachectl
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34844312
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев Дмитрий iDesperado Твилинев ДмитрийИскал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
Безрезультатно :(
если бы прописал - работало бы
куда прописывал то ?

Прописывали в apachectl

<? phpinfo(); ?> эту переменую видит ?
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34844561
нет, в phpinfo() ее не видно
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34844619
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев Дмитрийнет, в phpinfo() ее не видно

чудеса, да ? :)
давай отгадаю: карежишь apachectl, а рестартишь бинарник :)
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34844738
cherva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кракозябры в браузере?
Для начала посмотри, какая кодировка у тебя стоит для страницы:
автор<meta http-equiv=Content-Type content="text/html; charset=
Если авторwindows-1251 тогда смотри, какую кодировку автоматом ставит браузер.
Это очень похоже (~90%) на то, что страница в кодировке UTF-8, а строки - в windows-1251...
Если кодировка страницы/сайта критична, то тогда придётся прогонять строки через перекодировщик перед генерацией страницы.
Что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	function unhtmlentities ($string) {
		// Get HTML entities table
		$trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
		// Flip keys<==>values
		$trans_tbl = array_flip ($trans_tbl);
		// Add support for ' entity (missing in HTML_ENTITIES)
		$trans_tbl += array(''' => "'");
		// Replace entities by values
		return strtr ($string, $trans_tbl);
	}
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34844942
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага, NLS_LANG который видит апач зависит от кодировки у бровсера :)
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34845186
masteroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё у апача есть параметр, кажется, default_charset, который определяет, тег с какой кодировкой вставить. если кодировка не указана источником (скриптом).
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34845437
Hanatsu-tori
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменные окружения, чтобы Апач видел можно в httpd.conf прописывать.
SetEnv NLS_LANG=....

Тогда он увидит их.
Я в своё время оч долго и упорно пытался прописать ORACLE_HOME, ORACLE_SID etc.

Если через SetEnv, то в phpinfo() нормально показывается
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34845566
приписали в httpd.conf SetEnv.
добавили AddDefaultCharset windows-1251
Рестартовали сервер.

в результате phpinfo() выдает в разделе
Apache Environment
NLS_LANG American_America.CL8MsWin1251

PHP Variables
_SERVER["NLS_LANG"] American_America.CL8MsWin1251

результаты выборки прежние :(


Для cherva
Проблема не в том, как вывести на страницу. Это получается (см. первый топик). проблема в том, что на сервер видимо кириллица летит перекодированная, в результате не могу сделать контекстный поиск по таблице...

Есть еще у кого нидь предложения ?
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34846380
MaineCoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев Дмитрийприписали в httpd.conf SetEnv.
добавили AddDefaultCharset windows-1251
Рестартовали сервер.


результаты выборки прежние :(

Из под какого юзера стартует Апач? Что есть ораклового в его переменных окружения?
Ну или, проще, запустить sqlplus из под этого юзера и посмотреть результаты запросов...
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34846616
cherva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев Дмитрий
Для cherva
не могу сделать контекстный поиск по таблице ...

Простите, невнимательно вчитался в проблему.

А не пробовали ли Вы использовать для коннекта к БД библиотеку ADODB ?
Там на уровне сессии возможно применить NLS_*, что кстати Вы можете сделать и самостоятельно, к примеру:
Код: plaintext
1.
2.
3.
4.
$conn=&ADONewConnection('oci8');
/* или как у Вас описывается дескриптор подключения*/
$conn->NLS_DATE_FORMAT =  'DD.MM.YYYY HH24:MI:SS';
$conn->NLS_LANG = 'American_America.CL8MsWin1251';
Я поначалу тоже плясал с бубном вокруг настроек окружения, пока не применил библиотеку. Теперь и на хостингах и в интранет нет никаких проблем - можно заниматься именно кодингом, без оглядки на окружение...
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34846654
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев Дмитрий
Есть еще у кого нидь предложения ?

угу, разобратся кто виноват: запустите скрипт прямо из командной строки без апача.
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34847204
cherva Твилинев Дмитрий
Для cherva
не могу сделать контекстный поиск по таблице ...

Простите, невнимательно вчитался в проблему.

А не пробовали ли Вы использовать для коннекта к БД библиотеку ADODB ?
Там на уровне сессии возможно применить NLS_*, что кстати Вы можете сделать и самостоятельно, к примеру:
Код: plaintext
1.
2.
3.
4.
$conn=&ADONewConnection('oci8');
/* или как у Вас описывается дескриптор подключения*/
$conn->NLS_DATE_FORMAT =  'DD.MM.YYYY HH24:MI:SS';
$conn->NLS_LANG = 'American_America.CL8MsWin1251';
Я поначалу тоже плясал с бубном вокруг настроек окружения, пока не применил библиотеку. Теперь и на хостингах и в интранет нет никаких проблем - можно заниматься именно кодингом, без оглядки на окружение...

Используется компонента, которая работает как раз таки с ADODB. В документации ADODB видел что можно использовать (и используется) аlter session, а вот такие штуки не видел. Но попробую...
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34847687
cherva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твилинев Дмитрий... как раз таки с ADODB. В документации ADODB видел что можно использовать (и используется) аlter session, а вот такие штуки не видел. Но попробую...
7. Dates and Datetime in ADOdb , а я действовал по аналогии... И, что характерно, прекрасно работает!
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34855149
cherva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Твилинев Дмитрий:
Используете ли Вы вызов хранимых процедур через ADODB? Если ДА, то как?
В документации нашёл только работу с курсорами, но это не совсем то, что мне надо...
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34855328
Alex Roudnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iDesperado masteroid
при NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 так и должно быть. так что правильно прописывал

что должно быть ? квадратики вместо рус букв ??
автор"Если коннекчусь к базе так OCILogon($Username,$Password, $Databasename);, то запрос Select comments from myTable вернет вопросики вместо русских букв."

апач явно не в курсе про переменую среды NLS_LANG

Ну а как сам автор думает - язык американский, откуда там русские буквы?? Это для апаче не русские буквы а глюки, вот он их и рисует как глюки.
...
Рейтинг: 0 / 0
Oracle + PHP + кириллица. Не понимаю
    #34855393
iDesperado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Roudnev
Ну а как сам автор думает - язык американский, откуда там русские буквы?? Это для апаче не русские буквы а глюки, вот он их и рисует как глюки.
а какое отношение имеет язык к кодировки ?

oracle docs
The NLS_LANG parameter uses the following format:

NLS_LANG = LANGUAGE_TERRITORY.CHARACTER_SET

This format is explained in the following table:
Parameter Description
LANGUAGE Specifies the language for displaying product messages, day names, and month names in SQL.

Oracle Database Globalization Support Guide provides more information about languages.
TERRITORY Specifies the cultural-specific conventions for date, number, time, and monetary formatting.

Oracle Database Globalization Support Guide provides more information about territory conventions.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle + PHP + кириллица. Не понимаю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]