1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

Кодировка ...

Тема в разделе 'Запуск и Поддержка', создана пользователем Guard, 16 авг 2011.

Статус темы:
Закрыта.
  1. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Доброе Утро.
    Проблема такая, на сайте статистики причину банов показывает вопросиками.
    Естественно только русские слова.
    Что нужно изменить что бы в базу добавлялись нормальные названия банов?)


    Писал быстро - спешил. Уж сори если без подробностей )
  2. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    на 70% уверен что дело не в кодировке.
    выложи bans.php свой.
  3. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Код:
    <?php
    /*********************************************
    <!-- 
    *   	DOTA OPENSTATS
    *   
    *	Developers: Ivan.
    *	Contact: ivan.anta@gmail.com - Ivan
    *
    *	
    *	Please see http://openstats.iz.rs
    *	and post your webpage there, so I know who's using it.
    *
    *	Files downloaded from http://openstats.iz.rs
    *
    *	Copyright (C) 2010  Ivan
    *
    *
    *	This file is part of DOTA OPENSTATS.
    *
    * 
    *	 DOTA OPENSTATS is free software: you can redistribute it and/or modify
    *    it under the terms of the GNU General Public License as published by
    *    the Free Software Foundation, either version 3 of the License, or
    *    (at your option) any later version.
    *
    *    DOTA OPEN STATS is distributed in the hope that it will be useful,
    *    but WITHOUT ANY WARRANTY; without even the implied warranty of
    *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    *    GNU General Public License for more details.
    *
    *    You should have received a copy of the GNU General Public License
    *    along with DOTA OPEN STATS.  If not, see <http://www.gnu.org/licenses/>
    *
    -->
    **********************************************/
    
      include('header.php');
      
      $pageTitle = "$lang[bans]";
      
        
      if ($WarnAndExpireDate == 1)
      {$sqlWarn = " WHERE warn = 0 "; } else $sqlWarn = "";
    
       $sql = "SELECT COUNT(*) FROM bans $sqlWarn LIMIT 1";
       
       $result = $db->query($sql);
       $r = $db->fetch_row($result);
       $numrows = $r[0];
       
       $result_per_page = $bans_per_page;
    
      include('pagination.php');
      
      $order = 'id';
      
      if (isset($_GET['order']))
      {
      if ($_GET['order'] == 'name') {$order = ' LOWER(name) ';}
      if ($_GET['order'] == 'date') {$order = ' date ';}
      if ($_GET['order'] == 'game') {$order = ' LOWER(gamename) ';}
      if ($_GET['order'] == 'reason') {$order = ' LOWER(reason) ';}
      if ($_GET['order'] == 'bannedby') {$order = ' LOWER(admin) ';}
      if ($_GET['order'] == 'id') {$order = ' id ';}
      }
      
      $sort = 'DESC';
      if (isset($_GET['sort']) AND $_GET['sort'] == 'asc')
      {$sort = 'desc'; $sortdb = 'ASC';} else {$sort = 'asc'; $sortdb = 'DESC';}
      
      $sql = "
      SELECT * FROM bans 
      $sqlWarn
      ORDER BY 
      $order $sortdb LIMIT $offset, $rowsperpage";
     
      $result = $db->query($sql)  or die(mysql_error());
      ?><div align='center'>
      <table style='width:95%;margin:8px;'> 
      <tr>
       <th><div align='center'><a href='<?=$_SERVER['PHP_SELF']?>?order=id&sort=<?=$sort?>'><?=$lang["id"]?></a></div></th>
       <th><div align='left'><a href='<?=$_SERVER['PHP_SELF']?>?order=name&sort=<?=$sort?>'><?=$lang["name"]?></a></div></th>
       <th><div align='left'><a href='<?=$_SERVER['PHP_SELF']?>?order=reason&sort=<?=$sort?>'><?=$lang["reason"]?></a></div></th>
       <th><div align='left'><a href='<?=$_SERVER['PHP_SELF']?>?order=game&sort=<?=$sort?>'><?=$lang["game_name"]?></a></div></th>
       <th><div align='left'><a href='<?=$_SERVER['PHP_SELF']?>?order=date&sort=<?=$sort?>'><?=$lang["date"]?></a></div></th>
       <th><a href='<?=$_SERVER['PHP_SELF']?>?order=bannedby&sort=<?=$sort?>'><?=$lang["bannedby"]?></a></th>
      </tr><?php
      while ($list = $db->fetch_array($result,'assoc')) {
    
      $get_date = date($date_format,strtotime($list['date']) );
      $name = trim("$list[name]");
    
      $reason = convEnt2(trim($list["reason"])); 
    	  
      $myFlag = "";
      $IPaddress = $list["ip"];
      //COUNTRY FLAGS
    		if ($CountryFlags == 1 AND file_exists("./includes/ip_files/countries.php") AND $IPaddress!="")
    		{
    		$two_letter_country_code=iptocountry($IPaddress);
    		include("./includes/ip_files/countries.php");
    		$three_letter_country_code=$countries[$two_letter_country_code][0];
            $country_name=convEnt2($countries[$two_letter_country_code][1]);
    		$file_to_check="./includes/flags/$two_letter_country_code.gif";
    		if (file_exists($file_to_check)){
    		        $flagIMG = "<img src=$file_to_check>";
                    $flag = "<img onMouseout='hidetooltip()' onMouseover='tooltip(\"".$flagIMG." $country_name\",100); return false' src='$file_to_check' width='20' height='13'>";
                    }else{
                    $flag =  "<img title='$country_name' src='./includes/flags/noflag.gif' width='20' height='13'>";
                    }	
    		$myFlag = $flag;
    		}
      
      $celltitle = " title='$reason'";
      
      if (strlen($reason)>=40) {$reason = "".strtolower(substr($reason,0,40))."...";}
      
        
       if ($WarnAndExpireDate == 1)
       {
          if ($list["expiredate"]!="")
          {$reason.="<br /><strong>$lang[expire]</strong> (".date($date_format,strtotime($list["expiredate"])).")";}
       }
      
      $data = array($celltitle, $myFlag, $list['id'], $name, $reason, $list['gamename'], $get_date, strtolower($list['admin']),$list['admin']);
       
       $tags = array('{CELL}', '{FLAG}', '{ID}', '{NAME}', '{REASON}', '{GAMENAME}', '{DATE}', '{ADMIN}','{ADMIN_NAME}'
       );
       
       echo str_replace($tags, $data, file_get_contents("./style/$default_style/bans.html"));
      
      }
      echo "</table></div>";
      
      include('pagination.php');
      echo "<br/>";
      include('footer.php');
      $pageContents = ob_get_contents();
      ob_end_clean();
      echo str_replace('<!--TITLE-->', $pageTitle, $pageContents);
      //Cache this page
      if ($cachePages == '1')
      file_put_contents($CacheTopPage, str_replace("<!--TITLE-->",$pageTitle,$pageContents));
      ?>
  4. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Фаил стандартный. Я там ниче не менял...
  5. GeroyAnekdotov Ньюфаг

    Сообщения:
    20
    Спасибы:
    0
    та же проблема
  6. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Лог Гхоста
    О_о
  7. ViperNight ▒▒▒▒▒▒▒▒▒

    Сообщения:
    311
    Спасибы:
    154
    Сборка бота GHost:
    GHost++ r597M
    Дата начала использования бота:
    20.01.2007
    Skype:
    Мой статус
    Эта ошибка не является причиной появления вопросов в банлисте.

    Собственно ошибка в логе связянная латиной1 это из-за строки 113-114 в get_heroes.php:
    Код:
    WHERE original <> 'NULL' AND c.winner <> 0  AND b.`summary` != CONVERT( _utf8 '-' USING latin1 ) 
    COLLATE latin1_swedish_ci
    Появилась как раз в версии 1.3.9 DOS'a


    Вопросы появляются из-за некорректно сконфигурированной базы данных и из-за отсутствия костылей в файла для корректировки неверной конфигурации базы.
  8. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Хм... Можешь помочь исправить? :newcry:
  9. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Когда пишу " !ban 4op Нуб " оно уже сразу добавляет в базу вопросики...
  10. ViperNight ▒▒▒▒▒▒▒▒▒

    Сообщения:
    311
    Спасибы:
    154
    Сборка бота GHost:
    GHost++ r597M
    Дата начала использования бота:
    20.01.2007
    Skype:
    Мой статус
    Чтобы всё реально нормально работало с самого начала, нужно правильно сконфигурировать базу данных и использовать, к примеру, на веб-страницах кодировку UTF-8 без BOM.

    В конфиге базы данных MySQL (my.cnf/my.ini, кто что юзает) должны присутствовать следующие установленные значения:
    # В секцию client добавить, если есть - изменить соответственно
    Код:
    [client]
    default-character-set = utf8
    В секцию mysqld добавить, если есть, также изменить:
    Код:
    [mysqld]
    init_connect = 'SET collation_connection = utf8_general_ci; SET NAMES utf8;'
    character-set-server = utf8
    collation-server = utf8_general_ci
    Примечание: Если используется база данных в которой уже есть данные, посмотреть в каком они состоянии находятся.
    Может быть такое, что они уже записаны в базе кракозябрами (к примеру, через phpMyAdmin), для этого, соответственно, нужно их привести в удобоваримый вид, прежде чем переходить к вышеописанному способу. Если данные в базе изначально в нормальном, читабельном состоянии, нужно обратить внимания на выставленное сравнение (collation), установленное на таблицах и полях используемой базы. Там, где внесены и/или предполагается внесение, к примеру, русских букв, нужно установить его в значение utf8_general_ci.


    После этого, всё будет автоматом создаваться, записываться и извлекаться из базы в единой установленной кодировке UTF-8. Соответственно остаётся только следить за правильным вводом/выводом информации (юзать файлы страниц/скриптов в кодировке UTF-8 без BOM).


    Вот так вот.
    - Если уж делать совсем круто, то можно даже использовать сравнение utf8_unicode_ci вместо utf8_general_ci. Соответственно нужно везде в вышенаписанном лепить utf8_unicode_ci вместо utf8_general_ci.
  11. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Спасибо ViperNight. Помог решить проблему ! :bIbIbIblya:
Статус темы:
Закрыта.