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

saymong

Мой дом здесь!
Регистрация
29 Сен 2010
Сообщения
610
Реакции
430
Сорри, если создал тему не в том разделе.
Установил скрипт на сервер. БД скрипта в UTF-8. Скрипта также использует UTF-8. Сам мускул тоже выставлен в UTF-8.
Теперь проблема: если в некоторых разделах писать текст на кириллице (он заносится в БД) то он отображается нормально, если в другом разделе написать, то после сохранения выходят вот такие иероглифы
��ва[/spoil]
Перепробовал десятки вариантов, но все равно ничего не исправляется...
Сам код файла, через который портится кодировка
[spoil]<?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';
?>
 
а в базе нормально отображается?
попробуй добавить в скрипт после "mysql_set_charset("utf8");"
mysql_query("SET NAMES 'UTF8'");
 
или убрать mysql_set_charset("utf8");
:crazy:
 
В какой кодировке http сервер отдает страницу? можно посмотреть http заголовках сервера, через какой нибудь инсперктор кода. В хроме f12 вкладка сеть, и там нужно нажать document, потом найти что-то вроде 200 ok и посмотреть что там.

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

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

Также интересен вывод команды, sql
show variables like 'char%';
 
В какой кодировке http сервер отдает страницу? можно посмотреть http заголовках сервера, через какой нибудь инсперктор кода. В хроме f12 вкладка сеть, и там нужно нажать document, потом найти что-то вроде 200 ok и посмотреть что там.

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

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

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

В 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 KB · Просмотры: 17
  • blog1.png
    blog1.png
    16,5 KB · Просмотры: 18
  • blog2.png
    blog2.png
    28,8 KB · Просмотры: 16
Смотри чтобы пробела не было перед <?php в начале файла!
<?php header("Content-Type:text/html; charset=UTF-8"); ?>

<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>

То, что там на html написано что uft-8 никого не волнует, все браузеры смотрят заголовки http сервера, они являются решающим фактором для установки кодировки, если у тебя апач все просто.

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

AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule>

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

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

Если у тебя ngnix, то самый простой вариант, это добавить строчку в php код, либо писать в тех поддержку...
Хотя я хостингами не пользуюсь, может там только используется связка nginx+apache+php-fpm, у тебя наверно все просто.
 
Прописал в .htaccess данные.
Вот вывод show variables like 'char%'; запроса
У меня VDS. Апач стоит.
 

Вложения

  • charac.png
    charac.png
    14,2 KB · Просмотры: 22
Так у тебя и базе криво отображается, у меня как-то так было, прописал в скрипте такие строки:
Код:
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
 
Назад
Сверху