автоопределение кодировки сайта

[Удален]
1643

Добрый день.

Вопрос по любой бирже ссылок - продажи/покупки ссылок.

Имеются небольшие сайты с разными кодировками: cp1251 & UTF-8

Их много. Возможно ли в коде LUBAIA_BIRGA_SSILOK.php прописать что-нибудь для автоопределения кодировки сайта, чтоб ссылки всегда верно отображались?

mb_detect_encoding пробовал не получилось.

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

Вручную не вариант прописывать строку

$o['charset'] = 'UTF-8';

или

iconv("windows-1251", "UTF-8", $LUBAIA_BIRGA_SSILOK->return_links());

Нужно автоматизировать процесс.

Мерси.

A
На сайте с 19.07.2010
Offline
130
#1

Давно выдрал откуда-то функцию. Использую, работает.

Может не коректно определить, если на странице микс разных кодировок. Например страница cp1251, а банер или счетчик в utf-8 или где-то в коментариях строка не той кодировки.

Я выкручивался так: из страницы удалял все скрипты, стили, html коментарии и т.д., а остаток уже передавал в эту функцию.


function if_utf8($string){
return preg_match('%(?:
[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|[\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
|\xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)+%xs', $string);
}
.............
S
На сайте с 05.01.2013
Offline
40
#2
Neosapiens:

Имеются небольшие сайты с разными кодировками: cp1251 & UTF-8

Движки тоже разные?

[Удален]
#3
seogearbox:
Движки тоже разные?

Да. DLE, WP, Ешка и самописы

S
На сайте с 05.01.2013
Offline
40
#4
Neosapiens:

mb_detect_encoding пробовал не получилось.

на пыхе давно не писал, могу ошибиться, mb_http_output - не оно?

Виктор Горняков
На сайте с 25.09.2006
Offline
175
#5

Что-то типа такого?


<?php
//$path = "http://mywordpress.ru"; //example utf-8
$path = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7" ;
$header [] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5";
$header [] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1";
$header [] = "Accept_encoding: identity";
$header [] = "Accept_language: ru-ru,ru;q=0.5";
$header [] = "Connection: close";
$header [] = "Cache-Control: no-store, no-cache, must-revalidate";
$header [] = "Keep_alive: 300";
$header [] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT";
function return_data($path){
$page = "";
$arr = explode ("\r\n\r\n", $path);
$heder = $arr[0];
while ( list ($key, $val) = @each ($arr)){
if ($key=='0'){ continue; }
$page .= $val."\n";
}
return array ($heder,$page);
}
function output_r ($path){
global $header,$agent;
$arr = @parse_url ($path);
$host = $arr['host'];
if (! empty ($arr['path'])) $page = $arr['path'];
if (! empty ($arr['query'])) $query = $arr['query'];
if ($query!=''){$page.='?'.$query;}
if ($page==''){$page='/';}
$fp = @fsockopen ($host, 80, &$errno, &$errstr, 30);
if (!$fp){ return ''; }
$request = "GET $page HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
while ( list ($key, $val) = @each ($header)){ $request .= $val."\r\n";}
$request .= "Referer: http://www.".$host."/\r\n";
$request .= "User-Agent: ".$agent."\r\n";
$request .= "\r\n";
fwrite ($fp,$request);
while ($line = fgets ($fp, 1024)){ $out .= $line; }
return return_data($out);
}
function CurlPage ( $path ) {
global $agent,$header;
$arr = @parse_url ($path);
$ch = @curl_init ( $path );
@curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
@curl_setopt ( $ch , CURLOPT_VERBOSE , 0 );
@curl_setopt ( $ch , CURLOPT_HEADER , 1 );
@curl_setopt ( $ch , CURLOPT_USERAGENT , $agent );
@curl_setopt ( $ch , CURLOPT_REFERER , "http://www.".$arr['host']."/" );
@curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header );
@curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 );
@curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER, 0 );
@curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST, 0 );
$tmp = @curl_exec ( $ch );
@curl_close ( $ch );
if ($tmp==''){ $tmp = output_r ($path); }
return return_data($tmp);
}
if ($Curl_return=='true'){ $array = CurlPage ( $path ); }
else { $array = output_r ( $path ); }
$heder = $array[0];
$page = $array[1];
if ( preg_match ("~charset=([-\w\d]+)~i",$heder,$arrr)){ $charset_heder = trim ($arrr[1]); }
if ( preg_match ("~<meta[ \r\n\t]{1}[^>]*charset[^=]*=".
"([^ \"'>\r\n\t#]+)[ '\"\n\r\t]*[^>]*>~is", $page, $arrr)){ $charset_page = trim ($arrr[1]); }
if ($charset_page == ''){$charset = $charset_heder;}
else {$charset = $charset_page;}
print $charset;
?>

МСК серверы: VPS (VDS) CPU: ОТ 1 ЯДРА/RAM: ОТ 1024MB/SSD: ОТ 10 GB/+ МЕСТО ПОД БЭКАПЫ/IPV4: 1 ШТ от 104 ₽ в мес ---> https://bit.ly/qwartaru
A
На сайте с 19.07.2010
Offline
130
#6

DrCrow, для вставки кода в пост лучше использовать тег [ code ], а не [ php ]. Это глюк форума.

Ваш код рабочий и определяет кодировку по хеадеру и мета данным(похожий код я тоже использую), но к сожалению, "сайто-делатели" и "чудо-хостеры" могут влепить туда не ту кодировку.

Поэтому и приходиться так извращаться.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий