За последние 24 часа нас посетили 30544 программиста и 1800 роботов. Сейчас ищут 927 программистов ...

создание мета тегов keywords на лету

Тема в разделе "PHP для новичков", создана пользователем aziz, 15 май 2009.

  1. aziz

    aziz Активный пользователь

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Здравствуйте! На днях в интернете наткнулся на интересный скрипт который позволяет создавать мета теги keywords на лету из содержимого контента, всё бы хорошо но наткнулся на одну проблему после обработки скриптом вместо букв у меня получаются сплошные знаки вопроса, текст я беру из базы, затем пихаю в скрипт. кодировка сайта UTF-8
    Вот код.
    PHP:
    1. <?  
    2. include('_connect.php');
    3.  $id=($_GET['page']);
    4.    $id = intval($id);
    5.    $id=22;
    6. $query = "select * from pages where id='$id'";
    7. $result = mysql_query($query);
    8. while ($row = mysql_fetch_assoc($result)) {
    9.   $content = $row['content'];
    10. }
    11.  
    12.  
    13. class Counter
    14. {
    15.     var $origin_arr;
    16.     var $modif_arr;
    17.     var $min_word_length = 3;
    18.  
    19. function explode_str_on_words($text)
    20. {
    21.  
    22. $search = array ("'ё'",
    23.                  "'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
    24.                  "'<[\/\!]*?[^<>]*?>'si",           // Вырезаются html-тэги
    25.                  "'([\r\n])[\s]+'",                 // Вырезается пустое пространство
    26.                  "'&(quot|#34);'i",                 // Замещаются html-элементы
    27.                  "'&(amp|#38);'i",
    28.                  "'&(lt|#60);'i",
    29.                  "'&(gt|#62);'i",
    30.                  "'&(nbsp|#160);'i",
    31.                  "'&(iexcl|#161);'i",
    32.                  "'&(cent|#162);'i",
    33.                  "'&(pound|#163);'i",
    34.                  "'&(copy|#169);'i",
    35.                  "'&#(\d+);'e");
    36.  
    37. $replace = array ("е",
    38.                   " ",
    39.                   " ",
    40.                   "\\1 ",
    41.                   "\" ",
    42.                   " ",
    43.                   " ",
    44.                   " ",
    45.                   " ",
    46.                   chr(161),
    47.                   chr(162),
    48.                   chr(163),
    49.                   chr(169),
    50.                   "chr(\\1)");
    51.  
    52. $text = preg_replace ($search, $replace, $text);
    53.  
    54.  
    55.  
    56.     $del_symbols = array(",", ".", ";", ":", "\"", "#", "\$", "%", "^",
    57.                          "!", "@", "`", "~", "*", "-", "=", "+", "\\",
    58.                          "|", "/", ">", "<", "(", ")", "&", "?", "№", "\t",
    59.                          "\r", "\n", "{","}","[","]", "'", "“", "”", "•",
    60.                          "как", "для", "что", "или", "это", "этих",
    61.                          "всех", "вас", "они", "оно", "еще", "когда",
    62.                          "где", "эта", "лишь", "уже", "вам", "нет",
    63.                          "если", "надо", "все", "так", "его", "чем",
    64.                          "при", "даже", "мне", "есть", "раз", "два",
    65.                          "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
    66.                          );
    67.  
    68.     $text = str_replace($del_symbols, array(" "), $text);
    69.     $text = ereg_replace("( +)", " ", $text);
    70.     $this->origin_arr = explode(" ", trim($text));
    71.     return $this->origin_arr;
    72. }
    73.  
    74. function count_words()
    75. {
    76.     $tmp_arr = array();
    77.     foreach ($this->origin_arr as $val)
    78.     {
    79.         if (strlen($val)>=$this->min_word_length)
    80.         {
    81.             $val = strtolower($val);
    82.         if (array_key_exists($val, $tmp_arr))
    83.         {
    84.             $tmp_arr[$val]++;
    85.         }
    86.         else
    87.         {
    88.             $tmp_arr[$val] = 1;
    89.         }
    90.         }
    91.     }
    92.     arsort ($tmp_arr);
    93.     $this->modif_arr = $tmp_arr;
    94. }
    95.  
    96. function get_keywords($text)
    97. {
    98. $this->explode_str_on_words($text);
    99. $this->count_words();
    100. $arr = array_slice($this->modif_arr, 0, 15);
    101. $str = "";
    102. foreach ($arr as $key=>$val)
    103. {
    104. $str .= $key . ", ";
    105. }
    106. return trim(substr($str, 0, strlen($str)-2));
    107. }
    108. }
    109. // создание экземпляра класса
    110. $word_counter = new Counter();
    111.  
    112. // если длинна строки больше 50000
    113. if (strlen($content)>50000)
    114. {
    115.     // подбор слов
    116.     $keywords = $word_counter->get_keywords(substr($content, 0, 50000));
    117. }
    118. else // если меньше
    119. {
    120.     // подбор слов
    121.     $keywords = $word_counter->get_keywords($content);
    122. }
    123.  
    124. echo $keywords; //Здесь у меня все буквы в виде знака вопроса
    125. echo"<br>";
    126. echo"<br>";
    127. echo"<br>";
    128. echo $content; // А сдесь всё нормально
    129.  
    130. ?>
    131.  
    может кто знает как исправить ситуацию, буду весьма признателен...
     
  2. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    перед выборкой
    mysql_query("set names cp1251");
     
  3. aziz

    aziz Активный пользователь

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    дело в том что мне надо в UTF-8, из базы текст выдаётся нормально это можно проверить через " echo $content;", что то с кодировкой проискодит после оброботки скриптом, то есть "echo $keywords;" выдаёт <?>, в файле _connect.php у меня уже прописано
    PHP:
    1.    $link=mysql_connect("localhost", $us, $pw) OR die('Database connect error!');
    2.     $lib=mysql_select_db($db, $link) OR die('Database connect error!');
    3.     mysql_query('set character set utf8');
    4.             mysql_query('set character_set_client=utf8');
    5.             mysql_query('set character_set_connection=utf8');
    6.             mysql_query('set character_set_results=utf8');
    7.     unset($db,$pw);
    8.    
    9.      
    вот и не пойму в чём прикол.. :-(
     
  4. petrik_86

    petrik_86 Новичок

    С нами с:
    25 ноя 2014
    Сообщения:
    1
    Симпатии:
    0
    Попробуй :
    $word_counter = new Counter();
    $content =iconv("utf-8", "windows-1251", $myrow["descr"]);

    $word_counter = new Counter();
    if (strlen($content)>50000)
    {

    $keywords = iconv('windows-1251','utf-8',$word_counter->get_keywords(substr($content, 0, 50000)));
    }
    else
    {

    $keywords = iconv('windows-1251','utf-8',$word_counter->get_keywords($content));
    }
     
  5. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Код (Text):
    1.