Непонятки с кодировкой в скрипте

Тема в разделе "Как сделать...", создана пользователем saymong, 12 дек 2012.

  1. saymong

    saymong

    Регистр.:
    29 сен 2010
    Сообщения:
    480
    Симпатии:
    359
    Сорри, если создал тему не в том разделе.
    Установил скрипт на сервер. БД скрипта в UTF-8. Скрипта также использует UTF-8. Сам мускул тоже выставлен в UTF-8.
    Теперь проблема: если в некоторых разделах писать текст на кириллице (он заносится в БД) то он отображается нормально, если в другом разделе написать, то после сохранения выходят вот такие иероглифы
    ��ва

    Перепробовал десятки вариантов, но все равно ничего не исправляется...
    Сам код файла, через который портится кодировка
    <?php
    include 'header.php';
    foreach($_GET as $key => $value) {
    $gets[$key] = filter($value);
    }
    foreach($_POST as $key => $value) {
    $posts[$key] = filter($value);
    }

    mysql_set_charset("utf8");

    if(isset($posts["subject"]))
    {


    mysql_query("INSERT `blog` SET `subject` = '{$posts['subject']}', `message` = '{$posts['message']}', `date` = NOW()");
    $success = "Your Post has been Added!";

    }
    if(isset($gets["f"]))
    {
    if($gets["f"] == "delete")
    {
    mysql_query("DELETE from `blog` where `id` = '{$id}'");
    ?><script>window.location = "editblog.php";</script><?php
    exit;
    }
    }
    $myuser = mysql_query("SELECT * FROM `blog` WHERE `id`>'0'");
    $myuser = mysql_fetch_object($myuser);
    ?>
    <script>
    function deletesite()
    {
    if (confirm('Are you sure you would like to delete this post?'))
    {
    window.location = document.location.href + "&f=delete";
    }
    }
    </script>
    <div class="contentbox">
    <div class="head">Add New Blog Post</div>
    <div class="contentinside">
    <?php if(isset($error)) { ?>
    <div class="error">ERROR: <?php echo $error; ?></div>
    <?php }
    if(isset($success)) { ?>
    <div class="success">SUCCESS: <?php echo $success; ?></div>
    <?php }
    if(isset($warning)) { ?>
    <div class="warning">WARNING: <?php echo $warning; ?></div>
    <?php } ?>
    <form class="contentform" method="post">
    Subject<br/>
    <input name="subject" type="text" /><br/><br/>
    Message<br/>
    <textarea rows="10" cols="74" name="message" value="<?php echo $myuser->message; ?>"/></textarea><br/><br/>
    <input style="width:100%;" type="submit" value="Post To Blog"/><br/><br/><br/><br/>
    <center><input onclick="javascript:deletesite();" style="width:100px;" type="button" value="Delete"/></center>
    </form>
    </div>
    </div>
    <?php
    include 'footer.php';
    ?>
     
    Dead23Angel и FedorMaxx нравится это.
  2. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21
    а в базе нормально отображается?
    попробуй добавить в скрипт после "mysql_set_charset("utf8");"
    mysql_query("SET NAMES 'UTF8'");
     
  3. dmx

    dmx

    Регистр.:
    22 июн 2011
    Сообщения:
    662
    Симпатии:
    526
    или убрать mysql_set_charset("utf8");
    :crazy:
     
  4. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    129
    Симпатии:
    39
    В какой кодировке http сервер отдает страницу? можно посмотреть http заголовках сервера, через какой нибудь инсперктор кода. В хроме f12 вкладка сеть, и там нужно нажать document, потом найти что-то вроде 200 ok и посмотреть что там.

    Во вкладке сеть. Нужен такой заголовок Content-Type:text/html; charset=UTF-8

    Если его нет, смотри конфиг http сервера, или перед выводам, говори его сам. например
    PHP:
    <?php
    header
    ("Content-Type:text/html; charset=UTF-8");
    Обязательно прочитать http://php.net/manual/ru/function.header.php
    Там написано, что заголовок нужно отдавать первым, а только потом контент страницы.

    Также интересен вывод команды, sql
    show variables like 'char%';
     
  5. saymong

    saymong

    Регистр.:
    29 сен 2010
    Сообщения:
    480
    Симпатии:
    359
    В header.php который включен во все файлы, прописано
    <head>
    <meta charset="utf-8" />
    <title>Blog</title>
    <link rel="stylesheet" href="style.css" type="text/css" />
    <script type="text/javascript" src="../jquery.js"></script>
    </head>


    На скриншотах покажу что и как:
    После написания статьи на кириллице и сохранения, кодировка сразу херится См. blog.png
    blog1.png - как отображается в базе
    blog2.png - как отображается на фронтенде
     

    Вложения:

    • blog.png
      blog.png
      Размер файла:
      7,2 КБ
      Просмотров:
      16
    • blog1.png
      blog1.png
      Размер файла:
      16,5 КБ
      Просмотров:
      17
    • blog2.png
      blog2.png
      Размер файла:
      28,8 КБ
      Просмотров:
      15
    FedorMaxx нравится это.
  6. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    129
    Симпатии:
    39
    Смотри чтобы пробела не было перед <?php в начале файла!
    То, что там на html написано что uft-8 никого не волнует, все браузеры смотрят заголовки http сервера, они являются решающим фактором для установки кодировки, если у тебя апач все просто.

    Например так
    Создать файл .htaccess в корне сайта, добавить код:



    И покажи вывод sql запроса
    show variables like 'char%';

    Если у тебя денвер, раньше когда, я им пользовался,то он по умолчанию всегда ставил кодировку для всех виртуальных хостов windows-1251.

    Если у тебя ngnix, то самый простой вариант, это добавить строчку в php код, либо писать в тех поддержку...
    Хотя я хостингами не пользуюсь, может там только используется связка nginx+apache+php-fpm, у тебя наверно все просто.
     
  7. saymong

    saymong

    Регистр.:
    29 сен 2010
    Сообщения:
    480
    Симпатии:
    359
    Прописал в .htaccess данные.
    Вот вывод show variables like 'char%'; запроса
    У меня VDS. Апач стоит.
     

    Вложения:

    • charac.png
      charac.png
      Размер файла:
      14,2 КБ
      Просмотров:
      22
    FedorMaxx нравится это.
  8. Waki

    Waki Постоялец

    Регистр.:
    14 ноя 2012
    Сообщения:
    64
    Симпатии:
    21
    Так у тебя и базе криво отображается, у меня как-то так было, прописал в скрипте такие строки:
    Код:
     
    mysql_query("SET CHARSET utf8_general_ci");
    mysql_query('SET NAMES utf8');
    mysql_query('SET CHARACTER SET utf8' );
    mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"' );
    и .htaccess
    Код:
     
    AddDefaultCharset UTF-8