CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Смена кодировки при парсинге
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Комната программистов
1) Написал граббер.

2) Запрашиваемая странца в кодировке UTF 8

3) Конечный сайт - win1251

4) При просмотре результата - кракозябры, соответственно.

Вопрос: как можно сменить кодировку при отдаче в браузер
Screatch
Если я вас правильно понял, добавьте в начало .htaccess
AddDefaultCharset UTF-8
Не, это мы по умолчанию так ставим кодировку...
вопрос открыт
посмотри в библиотеке mb_string. там есть нужные функции
patriot, о, знакомые люди ;)
Да на конечном сайте не подключена библиотека эта, ну всмысле на сервере.
Была впринципе задумка через str_replace перегналь все иероглифи на наши буквы, как результат получается, но запутаться легко
Alexander
http://php.net/mb_convert_encoding
NoIndex
Alexander,
Цитата (shaman @ 28.9.2009, 5:07)
Да на конечном сайте не подключена библиотека эта
Alexander
Не заметил. Ладно, тогда:
iconv
Пробовал iconv, тоже, иначе не спрашивал бы :)
Вобщем думаю, что с поставленной задачей долго придется бороться.... :umnik:
Alexander
shaman, и как же Вы пробовали? Покажите код- что-нибудь придумаем.
Вот, попробуй функциями перекодировать:

function utf2win($str,$type="w"){
static $conv;
if( !is_array($conv) ){
// ASCII 128 - 255
$conv['w'] = array(
"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8a","\x8b","\x8c","\x8d","\x8e","\x8f",
"\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9a","\x9b","\x9c","\x9d","\x9e","\x9f",
"\xa0","\xa1","\xa2","\xa3","\xa4","\xa5","\xa6","\xa7","\xa8","\xa9","\xaa","\xab","\xac","\xad","\xae","\xaf",
"\xb0","\xb1","\xb2","\xb3","\xb4","\xb5","\xb6","\xb7","\xb8","\xb9","\xba","\xbb","\xbc","\xbd","\xbe","\xbf",
"\xc0","\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb","\xcc","\xcd","\xce","\xcf",
"\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6","\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde","\xdf",
"\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec","\xed","\xee","\xef",
"\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf7","\xf8","\xf9","\xfa","\xfb","\xfc","\xfd","\xfe","\xff");
$conv['u'] = array(
"\xd0\x82","\xd0\x83","\xe2\x80\x9a","\xd1\x93","\xe2\x80\x9e","\xe2\x80\xa6","\xe2\x80\xa0","\xe2\x80\xa1","\xe2\x82\xac","\xe2\x80\xb0","\xd0\x89","\xe2\x80\xb9","\xd0\x8a","\xd0\x8c","\xd0\x8b","\xd0\x8f",
"\xd1\x92","\xe2\x80\x98","\xe2\x80\x99","\xe2\x80\x9c","\xe2\x80\x9d","\xe2\x80\xa2","\xe2\x80\x93","\xe2\x80\x94","","\xe2\x84\xa2","\xd1\x99","\xe2\x80\xba","\xd1\x9a","\xd1\x9c","\xd1\x9b","\xd1\x9f",
"\xc2\xa0","\xd0\x8e","\xd1\x9e","\xd0\x88","\xc2\xa4","\xd2\x90","\xc2\xa6","\xc2\xa7","\xd0\x81","\xc2\xa9","\xd0\x84","\xc2\xab","\xc2\xac","\xc2\xad","\xc2\xae","\xd0\x87",
"\xc2\xb0","\xc2\xb1","\xd0\x86","\xd1\x96","\xd2\x91","\xc2\xb5","\xc2\xb6","\xc2\xb7","\xd1\x91","\xe2\x84\x96","\xd1\x94","\xc2\xbb","\xd1\x98","\xd0\x85","\xd1\x95","\xd1\x97",
"\xd0\x90","\xd0\x91","\xd0\x92","\xd0\x93","\xd0\x94","\xd0\x95","\xd0\x96","\xd0\x97","\xd0\x98","\xd0\x99","\xd0\x9a","\xd0\x9b","\xd0\x9c","\xd0\x9d","\xd0\x9e","\xd0\x9f",
"\xd0\xa0","\xd0\xa1","\xd0\xa2","\xd0\xa3","\xd0\xa4","\xd0\xa5","\xd0\xa6","\xd0\xa7","\xd0\xa8","\xd0\xa9","\xd0\xaa","\xd0\xab","\xd0\xac","\xd0\xad","\xd0\xae","\xd0\xaf",
"\xd0\xb0","\xd0\xb1","\xd0\xb2","\xd0\xb3","\xd0\xb4","\xd0\xb5","\xd0\xb6","\xd0\xb7","\xd0\xb8","\xd0\xb9","\xd0\xba","\xd0\xbb","\xd0\xbc","\xd0\xbd","\xd0\xbe","\xd0\xbf",
"\xd1\x80","\xd1\x81","\xd1\x82","\xd1\x83","\xd1\x84","\xd1\x85","\xd1\x86","\xd1\x87","\xd1\x88","\xd1\x89","\xd1\x8a","\xd1\x8b","\xd1\x8c","\xd1\x8d","\xd1\x8e","\xd1\x8f");
}//if
if ($type == 'w') return str_replace($conv['u'],$conv['w'],$str);
elseif ($type == 'u') return str_replace($conv['w'], $conv['u'],$str);
else return $str;
}

PHP: фукнции перекодировки UTF8-Win, Win-UTF8
function Utf8Win($str,$type="w")  {
	static $conv='';

	if (!is_array($conv))  {
		$conv = array();

		for($x=128;$x<=143;$x++)  {
			$conv[&#39;u&#39;][]=chr(209).chr($x);
			$conv[&#39;w&#39;][]=chr($x+112);

		}

		for($x=144;$x<=191;$x++)  {
			$conv[&#39;u&#39;][]=chr(208).chr($x);
			$conv[&#39;w&#39;][]=chr($x+48);
		}

		$conv[&#39;u&#39;][]=chr(208).chr(129);
		$conv[&#39;w&#39;][]=chr(168);
		$conv[&#39;u&#39;][]=chr(209).chr(145);
		$conv[&#39;w&#39;][]=chr(184);
		$conv[&#39;u&#39;][]=chr(208).chr(135);
		$conv[&#39;w&#39;][]=chr(175);
		$conv[&#39;u&#39;][]=chr(209).chr(151);
		$conv[&#39;w&#39;][]=chr(191);
		$conv[&#39;u&#39;][]=chr(208).chr(134);
		$conv[&#39;w&#39;][]=chr(178);
		$conv[&#39;u&#39;][]=chr(209).chr(150);
		$conv[&#39;w&#39;][]=chr(179);
		$conv[&#39;u&#39;][]=chr(210).chr(144);
		$conv[&#39;w&#39;][]=chr(165);
		$conv[&#39;u&#39;][]=chr(210).chr(145);
		$conv[&#39;w&#39;][]=chr(180);
		$conv[&#39;u&#39;][]=chr(208).chr(132);
		$conv[&#39;w&#39;][]=chr(170);
		$conv[&#39;u&#39;][]=chr(209).chr(148);
		$conv[&#39;w&#39;][]=chr(186);
		$conv[&#39;u&#39;][]=chr(226).chr(132).chr(150);
		$conv[&#39;w&#39;][]=chr(185);
	}

	if ($type == &#39;w&#39;) {
		return str_replace($conv[&#39;u&#39;],$conv[&#39;w&#39;],$str);
	} elseif ($type == &#39;u&#39;) {
		return str_replace($conv[&#39;w&#39;], $conv[&#39;u&#39;],$str);
	} else {
		return $str;
	}
}


Перекодировка UTF-8 в cp1251
SHAKA1, да , хорошая функция, работает.
только от первоначального текста осталось Ђњ и ”, и еще что то, по логике - это кавычки "

кавычки и "тире"

еще "многоточие нашел"
вобщем работает класно, респект
При замене кодировок при парсинге не всегда есть возможность использовать iconv(). Посмотрите здесь подробнее осмене кодировок
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.