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

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);

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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