Ajax и Windows-1251

  • Автор темы Xor-St
  • Дата начала
Статус
Закрыто для дальнейших ответов.
X

Xor-St

Guest
Если у вас есть какой-то самый оптимальный способ решения этой проблемы,то прошу отписаться, сам недавно смог найти решение этой проблемы,потратил на поиски двое суток. Я думаю что я не один такой, так поможем,другим!!!
 
X

Xor-St

Guest
Вычитал множество разных высказываний в сети,о том как же решить эту проблему,и пришел к выводу что большенство все таки от безисходности,приспосабливаются к UTF-8, так как на нем основано почти все...

Возможно это так,но я считаю,что для более удобной и приятной работы с ajax и современным стилем написания web приложений, лучшим вариантом все таки остается windows-1251. Еще раз повторяю,что так считаю я, если же вы имеете другое мнение и можете пояснить свои слова,то милости просим.

С уважением Xor-St.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Была подобная проблема! Для этих целей есть iconv либо самописная функция w1251 -> UTF8 и UTF8 -> w1251
Сам нашёл подобную функцию в интернете и заюзал! Если не найдёте, обращайтесь, выложу сюда :)
 
X

Xor-St

Guest
Была подобная проблема! Для этих целей есть iconv либо самописная функция w1251 -> UTF8 и UTF8 -> w1251
Сам нашёл подобную функцию в интернете и заюзал! Если не найдёте, обращайтесь, выложу сюда :)
Alex выкладывайте,а то моя что то не хочет работать. Желательно с пояснениями выкладывать,а не просто код. Thanks!
 

Ivan

суперМодератор
Регистрация
10.01.2007
Сообщения
316
У меня была другая проблема: перекодировка из утф в кою. Делал такой костыль. Perl.
Сам скрипт д.б. в коях + try-catch в примере кастомный, т.е. если юзать будете, нужно свой писать или евалить.
Посмотреть вложение utf_to_koi.txt

ЗЫ ну и для вашей ситуации он тож сгодится, т.к. скрипт универсален, всё зависит от параметров $from и $to - из какой кодировки гоните и в какую.
 
X

Xor-St

Guest
Данный пример я уже где то наблюдал....есть небольшая разница но все же...кстати в DLE, используется подобный способ решения проблемы но к сожалению он не особо у меня хочет работать.

Вот если кто нибудь сможет написать объяснение к этому коду,и проверить его,прошу попробывать.

Код:
function decode_to_utf8($int=0)
{
		$t = '';

		if ( $int < 0 )
		{
			return chr(0);
		}
		else if ( $int <= 0x007f )
		{
			$t .= chr($int);
		}
		else if ( $int <= 0x07ff )
		{
			$t .= chr(0xc0 | ($int >> 6));
			$t .= chr(0x80 | ($int & 0x003f));
		}
		else if ( $int <= 0xffff )
		{
			$t .= chr(0xe0 | ($int  >> 12));
			$t .= chr(0x80 | (($int >> 6) & 0x003f));
			$t .= chr(0x80 | ($int  & 0x003f));
		}
		else if ( $int <= 0x10ffff )
		{
			$t .= chr(0xf0 | ($int  >> 18));
			$t .= chr(0x80 | (($int >> 12) & 0x3f));
			$t .= chr(0x80 | (($int >> 6) & 0x3f));
			$t .= chr(0x80 | ($int  &  0x3f));
		}
		else
		{
			return chr(0);
		}

		return $t;
}

function convert_unicode($t, $to = 'windows-1251')
{
		$to = strtolower($to);

		if ($to == 'utf-8') {

			$t = preg_replace( '#%u([0-9A-F]{1,4})#ie', "decode_to_utf8(hexdec('\\1'))", utf8_encode($t) );
			$t = urldecode ($t);

		} else {

			$t = preg_replace( '#%u([0-9A-F]{1,4})#ie', "'&#' . hexdec('\\1') . ';'", $t );
			$t = urldecode ($t);
			$t = @html_entity_decode($t, ENT_NOQUOTES, $to);

		}

		return $t;
}
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Как ты и просил...
Файл JS с обращением
Код:
function makeRequest(url, block) {
  var http_request = false;
  if (window.XMLHttpRequest)
  {
	http_request = new XMLHttpRequest();
	if (http_request.overrideMimeType)
	{
	  http_request.overrideMimeType('text/xml');
	}
  } else if (window.ActiveXObject) {
	try {
	  http_request = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
		http_request = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (e) {}
	}
  }

  if (!http_request)
  {
	alert('Не вышло  Невозможно создать экземпляр класса XMLHTTP ');
	return false;
  }

	http_request.onreadystatechange = function() { alertContents(http_request, block); };
	http_request.open('GET', url, true);
	http_request.send(null);
}


function alertContents(http_request, block) {
  if (http_request.readyState != 4)
  {
	  block.innerHTML = "<img src='../skins/default/images/loader.gif'>";
  }
  if (http_request.readyState == 4)
  {
	if (http_request.status == 0 || http_request.status == 200)
	{
	  block.innerHTML = http_request.responseText;
	  s = http_request.responseText;
	} else {
	  return false;
	}
  }
}
файл PHP обработки БД и ответа category.php
Код:
<?php

include_once "config.mysql.php";

if(isset($_GET['id']) && isset($_GET['text']))
{
  $str = trim(Encode($_GET['text']));
  $strsql = "SELECT * FROM categoryes WHERE id=".intval($_GET['id'])." LIMIT 1";
  $rs = $con->createSQL($strsql);
  if($rs->isrows())
  {
	$array = $rs->getRow();
	$strsql = "UPDATE categoryes SET title='".$str."' WHERE id=".$array['id'];
	$rs = $con->createSQL($strsql);
	echo $_GET['text'];
  }
}

?>
файл config.mysql.php
Код:
<?php
include_once "../../config.php";
include_once "../../class/mysql.class.php";

function Encode($str, $type = 'w'){
	// $type:
	// 'w' - encodes from UTF to win
	// 'u' - encodes from win to UTF

		static $conv='';

		if (!is_array ( $conv )){
			$conv=array ();
			for ( $x=128; $x <=143; $x++ ){
				$conv['utf'][]=chr(209).chr($x);
				$conv['win'][]=chr($x+112);
			}

			for ( $x=144; $x <=191; $x++ ){
				$conv['utf'][]=chr(208).chr($x);
				$conv['win'][]=chr($x+48);
			}

			$conv['utf'][]=chr(208).chr(129);
			$conv['win'][]=chr(168);
			$conv['utf'][]=chr(209).chr(145);
			$conv['win'][]=chr(184);
		}

		if ( $type=='w' )
			return str_replace ( $conv['utf'], $conv['win'], $str );
		elseif ( $type=='u' )
			return str_replace ( $conv['win'], $conv['utf'], $str );
		else
			return $str;
	}
?>
Вот как раз функция перевода, на подключаемые файлы можно не смотеть, просто у меня к MySQL на классах идёт обращение :)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ