Не отображается русский заголовок, прошу помощи.

Obormot

Постоялец
Регистрация
10 Янв 2012
Сообщения
88
Реакции
2
Есть скрипт, кусок кода который в head:
PHP:
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<?php
function displayHead($title='', $keywords='', $description='', $head='')
    {
        global $mainframe;
 
            //  MOVE this into cfg some day
        $mainframe->cfg->setProperty('use_multi_lang','1') ;
       
        if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/uis', '', $title);
?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?=$mainframe->cfg->site_lang?>" xml:lang="<?=$mainframe->cfg->site_lang?>">
<head>
  <?php echo '<title>'. $title ."</title>\n";?>
<meta http-equiv="Content-Language" content="<?=$mainframe->cfg->site_lang?>" />
.....
При вводу через админку заголовка сайта на русском заголовок не отображается, на латинице все ок.

Меня лично смущает вот этот момент,
PHP:
if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/uis', '', $title);
Из-за этого может не отображатся по русски ?
Спасибо.
 
Добавь:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

и
if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/ui', '', $title);

ну и в редакторе кодировка utf-8

если cp1251

if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/i', '', $title);
 
Огромное спасибо за помощь!

Скрипт сам вставляет кодировку, исходя из того какая прописана в ленг файле :
Код:
  <meta http-equiv="Content-Type" content="text/html; charset=<?php echo LANG::_('html_charset')?>" />
В ленг файле прописана:
Код:
$lang['this_lang']            = 'English';
$lang['html_charset']        = 'utf-8';
$lang['undefined']            = 'undef';
....

!!! Русские буквы в заголовке стали появлять когда вставил второй вариант:
Код:
if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/i', '', $title);
А в посте Вы написали что это вариант для cp1251 :eek: все в порядке ?)
 
Посмотрите кодировку в редакторе, посмотрите кодировку страницы "Ваш браузер-> информация о странице", посмотрите кодировку db если отуда берется $title, для кириллицы в utf-8 должен работать как раз /ui
 
В редакторе N ++ в ленг файлах и php кодировка utf-8, в браузере utf-8,
в коде страницы содержится
Код:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
В phpMyadmin при экспорте из БД по умолчанию ставил кодировку utf-8, в таблицах в графе сравнение:
Код:
utf8_general_ci
 
Не во всех файлах скрипта (php) кодировка utf-8, некоторые файлы php в ANSI, может быть из-за этого ?
 
Да из-за этого, /ui - корректно работает для utf
/i - для ANSI
 
Сейчас взял исходные файлы скрипта без изменений.

Там все файлы скрипта как показывает N++ в кодировке ANSI, но только у ленг файлов прописано:
Код:
$lang['this_lang']            = 'English';
$lang['html_charset']        = 'utf-8';
$lang['undefined']            = 'undef';

У файла который загужается в БД при инсталяции кодировка ANSI as UTF-8.

Не понимаю что разработчики хотели сказать если все файлы в ANSI но при этом сделали так что скрип кодировку выводит как UTF (берет ее из ленг файла), кучерявый срипт ?
Версия вроде 10 и дальше, неужели такой глюк столько раз просмотрели..

Думаю тогда все перегонять в UTF не надо ? Оставлю все в ANSI ?
 
Как вариант перекодировка переменной в утф-8
PHP:
function win2utf($s){
  for($i=0, $m=strlen($s); $i<$m; $i++) {
      $c=ord($s[$i]);
      if ($c<=127) {$t.=chr($c); continue; }
      if ($c>=192 && $c<=207)    {$t.=chr(208).chr($c-48); continue; }
      if ($c>=208 && $c<=239) {$t.=chr(208).chr($c-48); continue; }
      if ($c>=240 && $c<=255) {$t.=chr(209).chr($c-112); continue; }
      if ($c==184) { $t.=chr(209).chr(145); continue; };
      if ($c==168) { $t.=chr(208).chr(129);  continue; };
  }
  return $t;
}
 
Назад
Сверху