Kvendi Опубликовано 21 Апреля 2008 Жалоба Поделиться Опубликовано 21 Апреля 2008 Здравствуйте, вот столкнулся с такой проблемой:при запросе к БД в xmlout.php (в одном из модов) поиск идет не по установленной в БД кодировке, а по какой- то другой. а где бы это поправить? xmlout использует собственное соединение с БД ? если да, то где указывается кодировка в его соединении ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Апреля 2008 Жалоба Поделиться Опубликовано 21 Апреля 2008 Просто в через (s/a)jax данные передаются в utf-8. Так что нужно входящие данные конвертировать в кодировку как у форума, смотрите как это делается в стандартных функциях. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 21 Апреля 2008 Автор Жалоба Поделиться Опубликовано 21 Апреля 2008 Все равнодо конца не понял, т.е. данные приходят из xml-http request уже в utf8 ? т.е. их преобразовывать надо уже в xmlout получается надо ?в таком запросе он с русскими буквами не дружит ,если в условии латиница, то все нормальноselect * from ibf_topics where titel='блаблабла':но тогда по логике должно работать так:select * from ibf_topics where title=convert('блаблабла' using cp1251): в обоих случаях блаблабла- некая строка переданная функции в xmlout-е.Так как тогда и где главное надо конвертировать передающиеся данные ?нашел нечто похожее в стандартной функции в xmlout: class_ajax->convert_and_make_safe(....);попробовал преобразовать её значение, которое передается функции результат тот же ( Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Апреля 2008 Жалоба Поделиться Опубликовано 21 Апреля 2008 Да. Правильно пробывали, но почему-то не захотели меня послушать. Пример переконвертации есть в функции post_edit_save. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 22 Апреля 2008 Автор Жалоба Поделиться Опубликовано 22 Апреля 2008 Упорно не получается, вот что делаю: function similar_topics() { $func = $this->ipsclass->load_class( ROOT_PATH.'sources/lib/func_similartopics.php', 'func_similartopics' ); $func->init(); $title = $this->ipsclass->class_ajax->convert_unicode(trim($this->ipsclass->input['title'])); if(empty($title)) { $content = "<tr><td class='row2' colspan='7' align='center'>{$this->ipsclass->lang['st_no_topic_title']}</td return; } //----------------------------------------- // Moderator? //----------------------------------------- if ( ! $this->ipsclass->member['is_mod'] ) { $approved = ' and approved=1'; } else { $approved = ' and approved IN (0,1)'; } // print( "select * from ibf_topics where title LIKE '%".$title."%' AND forum_id=".$this->ipsclass->input['fid'].$appro $this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'topics', 'where' => "title LIKE '%".$title."%' AND forum_id=".$this->ipsclass->input['fid'].$approved, 'limit' => array(0,10) ) ); $this->ipsclass->DB->exec_query(); if ($this->ipsclass->DB->get_num_rows()) { while($topic = $this->ipsclass->DB->fetch_row()) { $topic = $func->parse_data( $topic ); ...................В оригинале мода эта строчка$title = $this->ipsclass->class_ajax->convert_unicode(trim($this->ipsclass->input['title']));была без вызова $this->ipsclass->class_ajax->convert_unicode и поиск корректно производился только с английскими буквами, попробовал соответственно добавить вызов $this->ipsclass->class_ajax->convert_unicode чтобы конвертировать получаемую кирилицу, но все равно если в title есть русские буквы запрос упорно возвращает 0 , хотя эмуляция запроса с такими же параметрами в даминке возвращает корректное значениеможет я все- таки не правильно конвертирую ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 22 Апреля 2008 Жалоба Поделиться Опубликовано 22 Апреля 2008 Почему вы решили, что достаточно этой строчки?Почему вы применяете её к уже прочищенным данным из $this->ipsclass->input, а не из $_POST? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 22 Апреля 2008 Автор Жалоба Поделиться Опубликовано 22 Апреля 2008 в function post_edit_save()похожее есть только:$_POST['Post'] = $this->class_ajax->convert_unicode( $_POST['Post'] ); $_POST['Post'] = $this->class_ajax->convert_html_entities( $_POST['Post'] ); $this->ipsclass->input['post_edit_reason'] = $this->class_ajax->convert_and_make_safe( $this->ipsclass->input['post_edit_reason'], 0 );На основе этого сделал у себя: function similar_topics() { $func = $this->ipsclass->load_class( ROOT_PATH.'sources/lib/func_similartopics.php', 'func_similartopics' ); $func->init(); $_POST['title'] = $this->class_ajax->convert_unicode( $_POST['title'] ); $_POST['title'] = $this->class_ajax->convert_html_entities( $_POST['title'] ); $this->ipsclass->input['title'] = $this->class_ajax->convert_and_make_safe( $this->ipsclass->input['post_edit_reason'], 0 ); $title = trim($this->ipsclass->input['title']);Результат абсолютно тот же, что я теперь не так делаю ? ( кстати при выводе массива $_POST он собственно пуст, а при выводе $this->ipsclass->input['title'] все впорядке, показывает правильно, но проблема все равно таже ( Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 22 Апреля 2008 Жалоба Поделиться Опубликовано 22 Апреля 2008 Значит у вас не POST, а GET. Вы же всё равно $title присваиваете из $this->ipsclass->input, разве что-то могло измениться? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 23 Апреля 2008 Автор Жалоба Поделиться Опубликовано 23 Апреля 2008 Переделал вот так (по примеру переключения редакторов) function similar_topics() { $func = $this->ipsclass->load_class( ROOT_PATH.'sources/lib/func_similartopics.php', 'func_similartopics' ); $func->init(); $title = $this->class_ajax->convert_unicode( $_GET['title'] ); $title = $this->ipsclass->txt_stripslashes($title); $title = $this->class_ajax->convert_html_entities( $title ); if(empty($title)) { $content = "<tr><td class='row2' colspan='7' align='center'>{$this->ipsclass->lang['st_no_topic_title']}</td></tr>"; return; } //----------------------------------------- // Moderator? //----------------------------------------- if ( ! $this->ipsclass->member['is_mod'] ) { $approved = ' and approved=1'; } else { $approved = ' and approved IN (0,1)'; } $this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'topics', 'where' => "title LIKE '%".$title."%' AND forum_id=".$this->ipsclass->input['fid'].$approved, 'limit' => array(0,10) ) ); $this->ipsclass->DB->exec_query(); if ($this->ipsclass->DB->get_num_rows()) {И все равно в запросе упорно 0, хотя если вывести $title, то он выводится правильно, что же теперь не так ?( Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 23 Апреля 2008 Автор Жалоба Поделиться Опубликовано 23 Апреля 2008 Может можно просто как- то по другому в том случае данные выбирать ? правда не понятно как "пр другому"... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 23 Апреля 2008 Жалоба Поделиться Опубликовано 23 Апреля 2008 Нужно смотреть и проверять весь код, отлаживать, можете запостить тему в разработке, выложить что сделано, тогда смогу что-то определённое сказать. Пока что всё довольно похоже на правду. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 24 Апреля 2008 Автор Жалоба Поделиться Опубликовано 24 Апреля 2008 http://www.ibresource.ru/forums/index.php?showtopic=52909создал тему по обсуждению этого мода. (От автора уже,видимо, помощи не дождешься) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 26 Апреля 2008 Жалоба Поделиться Опубликовано 26 Апреля 2008 Найти(xmlout.php): $title = trim($this->ipsclass->input['title']);Заменить на: $title = trim($this->class_ajax->convert_and_make_safe( $this->ipsclass->input['title'], 1 )); Найти(*.js):so = document.getElementById( 'title' ).value;Заменить на:so = ajax_request.prototype.encodeurl(document.getElementById( 'title' ).value); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.