Перейти к контенту

xmlout.php и charset


Рекомендуемые сообщения

Здравствуйте, вот столкнулся с такой проблемой:

при запросе к БД в xmlout.php (в одном из модов) поиск идет не по установленной в БД кодировке, а по какой- то другой.

а где бы это поправить? xmlout использует собственное соединение с БД ? если да, то где указывается кодировка в его соединении ?

Ссылка на комментарий
Поделиться на других сайтах

Просто в через (s/a)jax данные передаются в utf-8. Так что нужно входящие данные конвертировать в кодировку как у форума, смотрите как это делается в стандартных функциях.
Ссылка на комментарий
Поделиться на других сайтах

Все равнодо конца не понял, т.е. данные приходят из 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(....);

попробовал преобразовать её значение, которое передается функции результат тот же (

Ссылка на комментарий
Поделиться на других сайтах

Да.

 

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

 

Пример переконвертации есть в функции post_edit_save.

Ссылка на комментарий
Поделиться на других сайтах

Упорно не получается, вот что делаю:

 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 , хотя эмуляция запроса с такими же параметрами в даминке возвращает корректное значение

может я все- таки не правильно конвертирую ?

Ссылка на комментарий
Поделиться на других сайтах

Почему вы решили, что достаточно этой строчки?

Почему вы применяете её к уже прочищенным данным из $this->ipsclass->input, а не из $_POST?

Ссылка на комментарий
Поделиться на других сайтах

в 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'] все впорядке, показывает правильно, но проблема все равно таже (

Ссылка на комментарий
Поделиться на других сайтах

Значит у вас не POST, а GET.

 

Вы же всё равно $title присваиваете из $this->ipsclass->input, разве что-то могло измениться?

Ссылка на комментарий
Поделиться на других сайтах

Переделал вот так (по примеру переключения редакторов)

 

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, то он выводится правильно, что же теперь не так ?(

Ссылка на комментарий
Поделиться на других сайтах

Может можно просто как- то по другому в том случае данные выбирать ? правда не понятно как "пр другому"...
Ссылка на комментарий
Поделиться на других сайтах

Нужно смотреть и проверять весь код, отлаживать, можете запостить тему в разработке, выложить что сделано, тогда смогу что-то определённое сказать. Пока что всё довольно похоже на правду.
Ссылка на комментарий
Поделиться на других сайтах

http://www.ibresource.ru/forums/index.php?showtopic=52909

создал тему по обсуждению этого мода. (От автора уже,видимо, помощи не дождешься)

Ссылка на комментарий
Поделиться на других сайтах

Найти(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);

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.