Вывод информации в uft-8 на странице в кодировке cp-1251

(Ответов: 14, Просмотров: 2090)
Страница 1 из 2 12 Последняя
  1. Banned
    • Регистрация: 07.06.2011
    • Сообщений: 757
    • Репутация: 350
    • Webmoney BL: ?
    Приветствую. Столкнулся с такой проблемой.
    Значить сам сайт в cp-1251, а форум в utf-8.

    Хочу вывести последние темы с форума на сайт, но, ... вместо названия тем, выводятся крякобразы.

    БД форума в utf-8
    Как починить, помогите?

    Код:
     $post=preg_replace('/{full_name}/',htmlentities($name, ENT_QUOTES,'cp-1251'), $block_forum_conf['forum_block']); 
        $post=preg_replace('/{reply_count}/',$reply_count, $post); 
        $post=preg_replace('/{view_count}/',$view_count, $post); 
        $post=preg_replace('/{user}/',htmlentities($user, ENT_QUOTES,'cp-1251'), $post); 
        $post=preg_replace('/{post_url}/',HTTP_PREFIX.$bb_url['value']."/showthread.php?goto=newpost&t=".$row["threadid"], $post);
        $post=preg_replace('/{user_url}/',HTTP_PREFIX.$bb_url['value']."/member.php?find=lastposter&t=".$row["threadid"], $post);  
        $post=preg_replace('/{div_cl}/',$div_cl, $post);
        $post=preg_replace('/{shot_name_post}/',htmlentities($short_name, ENT_QUOTES,'cp-1251'), $post); 
        $post=preg_replace('/{date}/',$date, $post); 
        $block.=$post;
    • 0
  2. Опытный Аватар для doctordick
    • Регистрация: 03.09.2009
    • Сообщений: 302
    • Записей в дневнике: 1
    • Репутация: 60
    а где в Вашем коде сам процесс перекодирования из utf-8 в cp-1251?

    что, то типа:
    ... mb_convert_encoding($post, "windows-1251", "utf-8");
    • 1

    Спасибо сказали:

    chak(29.09.2011),
  3. Banned
    • Регистрация: 07.06.2011
    • Сообщений: 757
    • Репутация: 350
    • Webmoney BL: ?
    doctordick,
    А вот, кстати, нету... сейчас попробую, спасибо.
    • 0
  4. Гуру Аватар для pingvin
    • Регистрация: 23.12.2007
    • Сообщений: 576
    • Репутация: 108
    Вот нужный код для конвертации:
    if (mb_check_encoding($post, 'UTF-8') && !mb_check_encoding($post, 'Windows-1251')){
    $post= mb_convert_encoding($post, 'Windows-1251', 'UTF-8');
    А вообще еще при обращении в БД вроде можно указать нужную кодировку.
    • 0
  5. Banned
    • Регистрация: 07.06.2011
    • Сообщений: 757
    • Репутация: 350
    • Webmoney BL: ?
    Что-то не хочет работать... я уже даже через iconv пытался... может что-то не так делаю?

    Весь код:

    Код:
    <?php
    @error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
    @ini_set ( 'display_errors', true );
    @ini_set ( 'html_errors', false );
    @ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
    
    define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
    define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
    
    
    require_once (ENGINE_DIR.'/data/block_forum_conf.php');
    
    	define("VB_HOST", "ADFSDFSDF" /*Хост*/);
    	define("VB_BASE", "SDFSDFSDFSDF" /*имя базы форума*/);
    	define("VB_USER", "SDFSDFSFSDF" /*Имя пользователя базы*/);
    	define("VB_PASS", "SDFSDFSDF" /*Пароль к базе*/);
    	define("VB_PREFIX", "" /*Префикс таблиц форума*/);
        define("HTTP_PREFIX", "" /*Префикс ссылок*/);
    
    /* Функция сохранения кеш 
    (взята с API DLE, API не используется ввиду глючности множественных подключений модов с API) */
    function cacheSave($fname, $vars) {
    	$cache_dir = ENGINE_DIR."/cache/";
    	$filename = $fname.".tmp";
    	$f = @fopen($cache_dir.$filename, "w+");
    	@chmod('0777', $cache_dir.$filename);
    	if (is_array($vars)) $vars = serialize($vars);
    	@fwrite($f, $vars);
    	@fclose($f);
    	return $vars;
    }
    
    
    
    /* Функция загрузки с кеша 
    (взята с API DLE, API не используется ввиду глючности множественных подключений модов с API) */
    function cacheLoad($fname, $timeout=300, $type = 'text') {
    	$cache_dir = ENGINE_DIR."/cache/";
    	$filename = $fname.".tmp";
    	if (!file_exists($cache_dir.$filename)) return false;
    	if ((filemtime($cache_dir.$filename)) < (time()-$timeout)) return false;
    	if ($type=='text'){
    		return file_get_contents($cache_dir.$filename);
    	} else {
    		return unserialize(file_get_contents($cache_dir.$filename));
    	}
    }	
    $cache_time = intval( $block_forum_conf['forum_cache'] );
    if ( $cache_time !=0) $cache_time = intval( $block_forum_conf['forum_cache'] );
    else $cache_time = 7200;
    
    $forum_posts = cacheLoad( 'forum_posts', $cache_time, 'text' );
    if ( !$forum_posts ) {
    
    $db->connect(VB_USER, VB_PASS, VB_BASE, VB_HOST);
    $bb_url = $db->super_query("SELECT value FROM " . VB_PREFIX . "setting WHERE varname='bburl'");
    
    $flg_start=1;
    
    if ($block_forum_conf['bad_forum_for_block'] != "" && $block_forum_conf['good_forum_for_block'] == "") {
    	
    	$forum_bad = explode(",", $block_forum_conf['bad_forum_for_block']);
    	
    	$i=0;
    	$l=count($forum_bad)-1;
    	$close_thread=",";		
    	for($i=0; $i<=$l; $i++)
    	{
    	
    	if($forum_bad[$i]!="")
    	{
              $result0 = $db->query("SELECT *FROM " . VB_PREFIX . "forum WHERE forumid Like '".$forum_bad[$i]."'");
    	      while($row0 = $db->get_row($result0))
    		{
    			$close_thread=$close_thread.$row0["childlist"].",";
    		}
            }
            }
    
    	$close_thread=substr($close_thread,1,strlen($close_thread)-2);
            $close_thread = str_replace(",-1", "", $close_thread);
             
            if ($close_thread == "")
            {
                $forum_id = "";
            } else {
    	    $forum_id = " WHERE forumid NOT IN ($close_thread)";
            }
    } elseif ($block_forum_conf['bad_forum_for_block'] == "" && $block_forum_conf['good_forum_for_block'] != "") {	
    	$forum_good = explode(",", $block_forum_conf['good_forum_for_block']);
    	$forum_id = " WHERE forumid IN('". implode("','", $forum_good) ."')";
    } else $forum_id = "";
    
    $result = $db->query("SELECT replycount, views, threadid, title, lastpost, lastposter FROM " . VB_PREFIX . "thread". $forum_id ." ORDER BY lastpost DESC LIMIT 0 ,".$block_forum_conf['count_post']);
    $num = $db->num_rows($result);
    $block = "<table width=\"100%\" height=\"100%\">";
    while ($row = $db->get_row($result))
    {
        if($flg_start==1)
        {
              $div_cl = "tbl_box_start";
        } else {
                  if($flg_start!=$num)
                  {
    	         if($flg_start!=1)
    	         {
                         $div_cl = "tbl_box";
    	         }
                  } else {
                      $div_cl = "tbl_box_end";
                  }
        }
    	
    	
    	
        $flg_start++;
    
    	$short_name=$name=$row["title"];
    	
    	quoted_printable_decode($name);
    	
    	if (strlen($name) > $block_forum_conf['leght_name'])
    		$short_name = substr ($name, 0, $block_forum_conf['leght_name'])." ..."; 	
    		
    	$row["lastpost"] = $row["lastpost"] + $block_forum_conf['date_adjust']*60;
    	
    	switch (date("d.m.Y",$row["lastpost"])):
    		case date("d.m.Y"): $date=date("Сегодня в H:i",$row["lastpost"]);	
        		break;
    		case date("d.m.Y",(time()+ $block_forum_conf['date_adjust']*60)-86400): $date=date("Вчера в H:i",$row["lastpost"]);	
        		break;
        	default:
        		$date=date("d.m.Y H:i",$row["lastpost"]);
            endswitch;
    
            $user=$row['lastposter'];
    	$reply_count=$row["replycount"];
    	$view_count=$row["views"];
    
        $post=preg_replace('/{full_name}/',htmlentities($name, ENT_QUOTES,'cp-1251'), $block_forum_conf['forum_block']); 
        $post=preg_replace('/{reply_count}/',$reply_count, $post); 
        $post=preg_replace('/{view_count}/',$view_count, $post); 
        $post=preg_replace('/{user}/',htmlentities($user, ENT_QUOTES,'cp-1251'), $post); 
        $post=preg_replace('/{post_url}/',HTTP_PREFIX.$bb_url['value']."/showthread.php?goto=newpost&t=".$row["threadid"], $post);
        $post=preg_replace('/{user_url}/',HTTP_PREFIX.$bb_url['value']."/member.php?find=lastposter&t=".$row["threadid"], $post);  
        $post=preg_replace('/{div_cl}/',$div_cl, $post);
        $post=preg_replace('/{shot_name_post}/',htmlentities($short_name, ENT_QUOTES,'cp-1251'), $post); 
        $post=preg_replace('/{date}/',$date, $post); 
        $block.=$post;
    }
     	$db->free();
    	$db->connect(DBUSER, DBPASS, DBNAME, DBHOST); 
    	$forum_posts= $block."</table>";
    
    cacheSave( 'forum_posts', $forum_posts);
    }
    echo $forum_posts;
     ?>

    Эм, движок DLE, форум vB 4
    • 0
  6. Опытный Аватар для doctordick
    • Регистрация: 03.09.2009
    • Сообщений: 302
    • Записей в дневнике: 1
    • Репутация: 60
    опять не вижу mb_convert_encoding

    попробуйте последнюю строку кода заменить на:

    echo mb_convert_encoding($forum_posts, "windows-1251", "utf-8");
    • 0
  7. Banned
    • Регистрация: 07.06.2011
    • Сообщений: 757
    • Репутация: 350
    • Webmoney BL: ?
    doctordick,

    Нет, всё равно крякобразы...

    ---------- Сообщение добавлено 14:14 ---------- Предыдущее 14:14 ----------

    Кстати, если тут, к примеру:

    ($short_name, ENT_QUOTES,'cp-1251'), $post);

    указать кодировку вместо cp-1251, к примеру, utf-8, то заголовок темы попросту не выводиться.

    ---------- Сообщение добавлено 14:16 ---------- Предыдущее 14:14 ----------

    pingvin,

    Что-то не хочет работать код. Очевидно, я что-то не так делаю...
    • 0
  8. Опытный Аватар для doctordick
    • Регистрация: 03.09.2009
    • Сообщений: 302
    • Записей в дневнике: 1
    • Репутация: 60
    а собственно если переключаете кодировку в браузере на utf-8 Вы видите нормально посты с форума?
    • 0
  9. Banned
    • Регистрация: 07.06.2011
    • Сообщений: 757
    • Репутация: 350
    • Webmoney BL: ?
    doctordick,

    Нет, при условии, если, как я писал выше поставить utf-8, то тема вообще не выводится, а если win-1251, то тоже крякообразы, но теперь по всему сайту.

    ---------- Сообщение добавлено 14:33 ---------- Предыдущее 14:28 ----------

    Ох, я вчера копался и теперьу меня админка форума вся в крякобразах... ойойой...
    • 0
  10. Опытный Аватар для doctordick
    • Регистрация: 03.09.2009
    • Сообщений: 302
    • Записей в дневнике: 1
    • Репутация: 60
    Цитата Сообщение от chak Посмотреть сообщение
    Нет, при условии, если, как я писал выше поставить utf-8,
    а при условии, что будет как сначала ($short_name, ENT_QUOTES,'cp-1251'), $post); ?

    Необходимо определиться на каком этапе происходит неверное перекодирование.

    Еще попробуйте после этой строки: $short_name=$name=$row["title"];
    вывести тайтл:
    echo $short_name;

    И поиграйте кодировкой в браузере: utf-8, windows-1251, что произойдет?
    • 0
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
Передача банковской кредитной информации
Кредиты 24 01.01.2014 08:42
Системы продвижения сайтов и заработка- сбор информации
Оффтоп и свободные темы 12 14.07.2011 19:20
Отображение информации на сайте на основе запроса посетителя
Софт, скрипты, сервисы 5 04.12.2010 19:27
Вопрос по кодировке
Прочее 2 06.01.2010 23:17

Интересные темы

вывод данных с таблицы wordpress

Инструкции по выводу данных с таблицы для определнных полей в форму wordpress, читайте здесь.

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры