X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
> PHP программисты ВЫРУЧАЙТЕ!, Читать ВСЕМ!!!
5maks5
5maks5
Topic Starter сообщение 7.7.2010, 11:58; Ответить: 5maks5
Сообщение #1


Участник
***


Группа: User
Сообщений: 105
Регистрация: 4.6.2010
Из: Russia
Поблагодарили: 8 раз
Репутация:   -5  


Ув. форумчани привет!

У меня такая проблема:
Имеется код

<?php
ini_set('max_execution_time',0);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php
function abi_get_url_object($url, $user_agent=null)
{
  define('ABI_URL_STATUS_UNSUPPORTED', 100);
  define('ABI_URL_STATUS_OK', 200);
  define('ABI_URL_STATUS_REDIRECT_301', 301);
  define('ABI_URL_STATUS_REDIRECT_302', 302);
  define('ABI_URL_STATUS_NOT_FOUND', 404);
  define('MAX_REDIRECTS_NUM', 4);

  $TIME_START = explode(' ', microtime());
  $TRY_ID = 0;
  $URL_RESULT = false;
  do
  {
    $URL_PARTS = @parse_url($url);
    if( !is_array($URL_PARTS))
    {
      break;
    };
    $URL_SCHEME = ( isset($URL_PARTS['scheme']))?$URL_PARTS['scheme']:'http';
    $URL_HOST = ( isset($URL_PARTS['host']))?$URL_PARTS['host']:'';
    $URL_PATH = ( isset($URL_PARTS['path']))?$URL_PARTS['path']:'/';
    $URL_PORT = ( isset($URL_PARTS['port']))?intval($URL_PARTS['port']):80;
    if( isset($URL_PARTS['query']) && $URL_PARTS['query']!='' )
    {
      $URL_PATH .= '?'.$URL_PARTS['query'];
    };
    $URL_PORT_REQUEST = ( $URL_PORT == 80 )?'':":$URL_PORT";
    $USER_AGENT = ( $user_agent == null )?'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)':strval($user_agent);
    $GET_REQUEST = "GET $URL_PATH HTTP/1.0\r\n"
    ."Host: $URL_HOST$URL_PORT_REQUEST\r\n"
    ."Accept: text/plain\r\n"
    ."Accept-Encoding: identity\r\n"
    ."User-Agent: $USER_AGENT\r\n\r\n";
    $SOCKET_TIME_OUT = 30;
    $SOCKET = @fsockopen($URL_HOST, $URL_PORT, $ERROR_NO, $ERROR_STR, $SOCKET_TIME_OUT);
    if( $SOCKET )
    {
     if( fputs($SOCKET, $GET_REQUEST))
     {
      socket_set_timeout($SOCKET, $SOCKET_TIME_OUT);
      $header = '';
      $SOCKET_STATUS = socket_get_status($SOCKET);
      while( !feof($SOCKET) && !$SOCKET_STATUS['timed_out'] )
      {
        $temp = fgets($SOCKET, 128);
        if( trim($temp) == '' ) break;
        $header .= $temp;
        $SOCKET_STATUS = socket_get_status($SOCKET);
      };
      if( preg_match('~HTTP\/(\d+\.\d+)\s+(\d+)\s+(.*)\s*\\r\\n~si', $header, $res))
       $SERVER_CODE = $res[2];
      else
       break;

      if( $SERVER_CODE == ABI_URL_STATUS_OK )
      {
        $content = '';
        $SOCKET_STATUS = socket_get_status($SOCKET);
        while( !feof($SOCKET) && !$SOCKET_STATUS['timed_out'] )
        {
          $content .= fgets($SOCKET, 1024*8);
          $SOCKET_STATUS = socket_get_status($SOCKET);
        };
        $TIME_END = explode(' ', microtime());
        $TIME_TOTAL = ($TIME_END[0]+$TIME_END[1])-($TIME_START[0]+$TIME_START[1]);
        $URL_RESULT['header'] = $header;
        $URL_RESULT['content'] = $content;
        $URL_RESULT['time'] = $TIME_TOTAL;
        $URL_RESULT['description'] = '';
        $URL_RESULT['keywords'] = '';
        $URL_RESULT['title'] =( preg_match('~<title>(.*)<\/title>~U', $content, $res))?strval($res[1]):'';
        if( preg_match_all('~<meta\s+name\s*=\s*["\']?([^"\']+)["\']?\s+content\s*=["\']?([^"\']+)["\']?[^>]+>~', $content, $res, PREG_SET_ORDER) > 0 )
        {
         foreach($res as $meta)
          $URL_RESULT[strtolower($meta[1])] = $meta[2];
        };
      }
      elseif( $SERVER_CODE == ABI_URL_STATUS_REDIRECT_301 || $SERVER_CODE == ABI_URL_STATUS_REDIRECT_302 )
      {
        if( preg_match('~location\:\s*(.*?)\\r\\n~si', $header, $res))
        {
         $REDIRECT_URL = rtrim($res[1]);
         $URL_PARTS = @parse_url($REDIRECT_URL);

         if( isset($URL_PARTS['scheme'])&& isset($URL_PARTS['host']))
          $url = $REDIRECT_URL;
         else
          $url = $URL_SCHEME.'://'.$URL_HOST.'/'.ltrim($REDIRECT_URL, '/');
        }
        else
        {
         break;
        };
      };
     };
     fclose($SOCKET);
    }
    else
    {
     break;
    };
    $TRY_ID++;
  }
  while( $TRY_ID <= MAX_REDIRECTS_NUM && $URL_RESULT === false );
  return $URL_RESULT;
};



function getinfo($url){
    $url = 'http://'.$url.'/';
    $user_agent = 'pro100blog info ver 2.0';
    $URL_OBJ = abi_get_url_object($url, $user_agent);
    if( $URL_OBJ )
    {
          $CONTENT = $URL_OBJ['content'];
          $HEADER = $URL_OBJ['header'];
          $TITLE = $URL_OBJ['title'];

          $DESCRIPTION = $URL_OBJ['description'];
          $KEYWORDS = $URL_OBJ['keywords'];
          $TIME_REQUEST = $URL_OBJ['time'];  
          
          echo "<table border=0 cellpadding=5>";
          
          if(!$TITLE=='') echo "
  <tr>
      <td valign=top class=tleft>Заголовок</td>
      <td valign=top class=tright><i>".$TITLE."</i></td>
  </tr>";
          if(!$DESCRIPTION=='') echo "
  <tr>
      <td valign=top class=tleft>Описание страницы</td>
      <td valign=top class=tright><i>".$DESCRIPTION."</i></td>
  </tr>";
  if(!$KEYWORDS=='') echo "
  <tr>
      <td valign=top class=tleft>Ключевые слова</td>
      <td valign=top class=tright><i>".$KEYWORDS."</i></td>
  </tr>
  ";
  if(!$TIME_REQUEST=='') echo "
  <tr>
      <td valign=top class=tleft>Время отклика</td>
      <td valign=top class=tright><i>".$TIME_REQUEST."</i> сек.</td>
  </tr>
  ";
  echo "</table>";

          
    }
    else echo "ЗапрашиРоооо°.";
}





?>


Поясняю для чего этот код - это парсер заголовка, описания и ключевых слов! Но проблема в кодировке вывода результата =(
Скрипт показывает нормальные значения если сайт в UTF-8, а вот если сайт который скрипт парсит в Windows-1251 всё коряво в результате!
Помогите как нибудь сделать что бы скрипт автоматически распознавал кодировку проверяемого сайта и если нужно перекодировать то он перекодирует!


В коде есть сроки:

$CONTENT = $URL_OBJ['content'];
$HEADER = $URL_OBJ['header'];
$TITLE = $URL_OBJ['title'];
$TITLE = iconv("windows-1251", "utf-8", $TITLE);
$DESCRIPTION = $URL_OBJ['description'];
$KEYWORDS = $URL_OBJ['keywords'];
$TIME_REQUEST = $URL_OBJ['time'];

Тут я в коде выделил функцию перекодировки! Если проверяемый сайт имеет кодировку Windows-1251 то скрипт переводит и подаёт результаты в UTF-8, но тут как тут другая проблема =( опять же если проверяемый сайт в UTF-8 то всё криво =(

Или может у кого есть нормальный скрипт? Типа такого:


Очень надеюсь на вашу помощь!

________________________________________________________________________________


Ну что ни кто не поможет? =(
________________________________________________________________________________

Сообщение отредактировал 5maks5 - 7.7.2010, 12:11


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Vladimir-AWM
Vladimir-AWM
сообщение 7.7.2010, 12:26; Ответить: Vladimir-AWM
Сообщение #2


Участник
***

Группа: User
Сообщений: 236
Регистрация: 7.2.2010
Из: Челябинск
Поблагодарили: 62 раза
Репутация:   16  


Как вариант можно смотреть кодировку в ответе от сервера (Content-Type: text/html; charset=windows-1251).


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5maks5
5maks5
Topic Starter сообщение 7.7.2010, 12:29; Ответить: 5maks5
Сообщение #3


Участник
***


Группа: User
Сообщений: 105
Регистрация: 4.6.2010
Из: Russia
Поблагодарили: 8 раз
Репутация:   -5  


(Vladimir-AWM @ 7.7.2010, 11:26) *
Как вариант можно смотреть кодировку в ответе от сервера (Content-Type: text/html; charset=windows-1251).


Эх еще бы скрипт помогли поправить как надо =(
Я и так и сяк пробовал! Но хотелось бы что бы результаты ВЫВОДИЛ ТОЛЬКО В UTF-8 т.е.

Кодирует всегда:
UTF-8 => UTF-8
Windows-1251 => UTF-8


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Electric
Electric
сообщение 7.7.2010, 12:34; Ответить: Electric
Сообщение #4


CMS help/antivirus
******

Группа: Active User
Сообщений: 1532
Регистрация: 27.12.2009
Из: Єдина Україна
Поблагодарили: 389 раз
Репутация:   57  


По идее так:
$CONTENT = $URL_OBJ['content'];
$HEADER = $URL_OBJ['header'];
$TITLE = $URL_OBJ['title'];
$DESCRIPTION = $URL_OBJ['description'];
$KEYWORDS = $URL_OBJ['keywords'];
$TIME_REQUEST = $URL_OBJ['time'];

if (strpos($CONTENT, "charset=windows-1251"))
{
$TITLE = iconv("windows-1251", "utf-8", $TITLE);
$CONTENT = iconv("windows-1251", "utf-8", $CONTENT);
$HEADER = iconv("windows-1251", "utf-8", $HEADER);
}

Пробуйте wink.gif


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
seotouch
seotouch
сообщение 7.7.2010, 12:41; Ответить: seotouch
Сообщение #5


Прощайте!
*****

Группа: Active User
Сообщений: 998
Регистрация: 7.1.2009
Поблагодарили: 405 раз
Репутация:   45  


Как вы хорошо с нуля то пишите smile.gif


--------------------
Навсегда ушел


Поблагодарили: (2)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5maks5
5maks5
Topic Starter сообщение 7.7.2010, 12:44; Ответить: 5maks5
Сообщение #6


Участник
***


Группа: User
Сообщений: 105
Регистрация: 4.6.2010
Из: Russia
Поблагодарили: 8 раз
Репутация:   -5  


(Electric @ 7.7.2010, 11:34) *
По идее так:
Код
$CONTENT = $URL_OBJ['content'];
$HEADER = $URL_OBJ['header'];
$TITLE = $URL_OBJ['title'];
$DESCRIPTION = $URL_OBJ['description'];
$KEYWORDS = $URL_OBJ['keywords'];
$TIME_REQUEST = $URL_OBJ['time'];

if (strpos($CONTENT, "charset=windows-1251"))
{
$TITLE = iconv("windows-1251", "utf-8", $TITLE);
$CONTENT = iconv("windows-1251", "utf-8", $CONTENT);
$HEADER = iconv("windows-1251", "utf-8", $HEADER);
}

Пробуйте wink.gif


Сделал таким код!

$CONTENT = $URL_OBJ['content'];
$HEADER = $URL_OBJ['header'];
$TITLE = $URL_OBJ['title'];
$DESCRIPTION = $URL_OBJ['description'];
$KEYWORDS = $URL_OBJ['keywords'];
$TIME_REQUEST = $URL_OBJ['time'];

if (strpos($CONTENT, "charset=windows-1251"))
{
$CONTENT = iconv("windows-1251", "utf-8", $CONTENT);
$HEADER = iconv("windows-1251", "utf-8", $HEADER);
$TITLE = iconv("windows-1251", "utf-8", $TITLE);
$DESCRIPTION = $URL_OBJ['description'];
$KEYWORDS = iconv("windows-1251", "utf-8", $KEYWORDS);
}

Сайты которые в UTF-8 результаты выводит нормально, сайт в Windows-1251 с моим кодом отображаются нормально только ключевые слова! заголовок и описание кривое по прежнему.

(seotouch @ 7.7.2010, 11:41) *
Как вы хорошо с нуля то пишите smile.gif


Скрипт работает но не так как хотелось бы! смотрите демо! там уже идут мелкие перемены =)

P.S. вы в 17 лет написали бы сервис анализа сайтов? =)

Сообщение отредактировал 5maks5 - 7.7.2010, 12:51


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Vladimir-AWM
Vladimir-AWM
сообщение 7.7.2010, 12:55; Ответить: Vladimir-AWM
Сообщение #7


Участник
***

Группа: User
Сообщений: 236
Регистрация: 7.2.2010
Из: Челябинск
Поблагодарили: 62 раза
Репутация:   16  


В теле документа кодировка может быть и не указана. Попробуйте так:

if (stristr($URL_OBJ['header'], "windows-1251")) {
$CONTENT = iconv("windows-1251", "utf-8", $URL_OBJ['content']);
$TITLE = iconv("windows-1251", "utf-8", $URL_OBJ['title']);
$DESCRIPTION = iconv("windows-1251", "utf-8", $URL_OBJ['description']);
$KEYWORDS = iconv("windows-1251", "utf-8", $URL_OBJ['keywords']);
}
else {
$CONTENT = $URL_OBJ['content'];
$TITLE = $URL_OBJ['title'];
$DESCRIPTION = $URL_OBJ['description'];
$KEYWORDS = $URL_OBJ['keywords'];
}

$TIME_REQUEST = $URL_OBJ['time'];
$HEADER = $URL_OBJ['header'];

А вообще неплохо было бы сначала посмотреть что в переменной $URL_OBJ['header'] отдается.

Сообщение отредактировал Vladimir-AWM - 7.7.2010, 12:58


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5maks5
5maks5
Topic Starter сообщение 7.7.2010, 12:58; Ответить: 5maks5
Сообщение #8


Участник
***


Группа: User
Сообщений: 105
Регистрация: 4.6.2010
Из: Russia
Поблагодарили: 8 раз
Репутация:   -5  


Vladimir-AWM, огромнейшее вам спасибо! Всё работает! Можете свою работу потестить _ttp://seo.pro100blog.ru


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Electric
Electric
сообщение 7.7.2010, 13:12; Ответить: Electric
Сообщение #9


CMS help/antivirus
******

Группа: Active User
Сообщений: 1532
Регистрация: 27.12.2009
Из: Єдина Україна
Поблагодарили: 389 раз
Репутация:   57  


(5maks5 @ 7.7.2010, 11:58) *
Vladimir-AWM, огромнейшее вам спасибо! Всё работает! Можете свою работу потестить _ttp://seo.pro100blog.ru
Поставьте двойную проверку:
if (stristr($HEADER, "windows-1251") || strpos($CONTENT, "windows-1251"))
{
...
}
Так вы точно перестрахуетесь. cool.gif


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 7.7.2010, 13:18; Ответить: webpavilion
Сообщение #10


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


как же убого написано...


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 653 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3415 12.12.2017, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) php скрипты любой сложности / диз+верстка (адаптивно)
любые задачи на php - автоматизация, парсинг, работа с БД
1 affrodita 500 8.12.2017, 17:40
автор: affrodita
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыImage Optimizer (PHP)
6 bars96 927 17.11.2017, 0:47
автор: bars96
Открытая тема (нет новых ответов) Стабильный хостинг за 30р в месяц. GNU/Linux, PHP, MySQL, Perl, бэкапы. Помогу перенести сайт.
5 freeax 1544 10.11.2017, 13:15
автор: freeax


 



RSS Текстовая версия Сейчас: 15.12.2017, 14:31
Дизайн