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

Тема в разделе "PHP", создана пользователем Obormot, 14 мар 2012.

Модераторы: latteo
  1. Obormot

    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);
    Из-за этого может не отображатся по русски ?
    Спасибо.
     
  2. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    Добавь:
    <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);
     
    Obormot нравится это.
  3. Obormot

    Obormot Постоялец

    Регистр.:
    10 янв 2012
    Сообщения:
    88
    Симпатии:
    2
    Огромное спасибо за помощь!

    Скрипт сам вставляет кодировку, исходя из того какая прописана в ленг файле :
    Код:
      <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: все в порядке ?)
     
  4. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    Посмотрите кодировку в редакторе, посмотрите кодировку страницы "Ваш браузер-> информация о странице", посмотрите кодировку db если отуда берется $title, для кириллицы в utf-8 должен работать как раз /ui
     
  5. Obormot

    Obormot Постоялец

    Регистр.:
    10 янв 2012
    Сообщения:
    88
    Симпатии:
    2
    В редакторе N ++ в ленг файлах и php кодировка utf-8, в браузере utf-8,
    в коде страницы содержится
    Код:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    В phpMyadmin при экспорте из БД по умолчанию ставил кодировку utf-8, в таблицах в графе сравнение:
    Код:
    utf8_general_ci
     
  6. Obormot

    Obormot Постоялец

    Регистр.:
    10 янв 2012
    Сообщения:
    88
    Симпатии:
    2
    Не во всех файлах скрипта (php) кодировка utf-8, некоторые файлы php в ANSI, может быть из-за этого ?
     
  7. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    Да из-за этого, /ui - корректно работает для utf
    /i - для ANSI
     
  8. Obormot

    Obormot Постоялец

    Регистр.:
    10 янв 2012
    Сообщения:
    88
    Симпатии:
    2
    Сейчас взял исходные файлы скрипта без изменений.

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

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

    Думаю тогда все перегонять в UTF не надо ? Оставлю все в ANSI ?
     
  9. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    Как вариант перекодировка переменной в утф-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;
    }
     
  10. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    o_O А что iconv не рулит нынче ?

    PHP:
    $title=iconv('windows-1251''utf-8'$title);
    Но это не вариант, не стоит делать перекодеровку - это глупо.