Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 09:05   #1
moshkin_ura
Web Studio "БЕЛКО"
Форумчанин
 
Аватар для moshkin_ura
 
Регистрация: 15.08.2011
Сообщений: 180
Вопрос Не работает кодировка windows-1251 в PHP

Вот затеял делать чат(нашел в инете) работает все нормально но имя пользователя отображается некоректно(квадратики) вот код...
файл index.php
PHP код:
<?
session_start
();

if(isset(
$_GET['logout'])){    
    
    
//Simple exit message
    
$fp fopen("log.html"'a');
    
fwrite($fp"<div class='msgln'><i>User "$_SESSION['name'] ." has left the chat session.</i><br></div>");
    
fclose($fp);
    
    
session_destroy();
    
header("Location: index.php"); //Redirect the user
}

function 
loginForm(){
    echo
'
    <div id="loginform">
    <form action="index.php" method="post">
        <p>Please enter your name to continue:</p>
        <label for="name">Name:</label>
        <input type="text" name="name" id="name" />
        <input type="submit" name="enter" id="enter" value="Enter" />
    </form>
    </div>
    '
;
}

if(isset(
$_POST['enter'])){
    if(
$_POST['name'] != ""){
        
$_SESSION['name'] = stripslashes(htmlspecialchars($_POST['name']));
    }
    else{
        echo 
'<span class="error">Please type in a name</span>';
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Chat - Customer Module</title>
<meta http-equiv="Content-Type" content="text/html/php"; charset="windows-1251">
<link type="text/css" rel="stylesheet" href="style.css" />
</head>

<?php
if(!isset($_SESSION['name'])){
    
loginForm();
}
else{
?>
<div id="wrapper">
    <div id="menu">
        <p class="welcome">Welcome, <b><?php echo $_SESSION['name']; ?></b></p>
        <p class="logout"><a id="exit" href="#">Exit Chat</a></p>
        <div style="clear:both"></div>
    </div>    
    <div id="chatbox"><?php
    
if(file_exists("log.html") && filesize("log.html") > 0){
        
$handle fopen("log.html""r");
        
$contents fread($handlefilesize("log.html"));
        
fclose($handle);
        
        echo 
$contents;
    }
    
?></div>
    
    <form name="message" action="">
        <input name="usermsg" type="text" id="usermsg" size="63" />
        <input name="submitmsg" type="submit"  id="submitmsg" value="Send" />
    </form>
</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
// jQuery Document
$(document).ready(function(){
    //If user submits the form
    $("#submitmsg").click(function(){    
        var clientmsg = $("#usermsg").val();
        $.post("post.php", {text: clientmsg});                
        $("#usermsg").attr("value", "");
        return false;
    });
    
    //Load the file containing the chat log
    function loadLog(){        
        var oldscrollHeight = $("#chatbox").attr("scrollHeight") - 20;
        $.ajax({
            url: "log.html",
            cache: false,
            success: function(html){        
                $("#chatbox").html(html); //Insert chat log into the #chatbox div                
                var newscrollHeight = $("#chatbox").attr("scrollHeight") - 20;
                if(newscrollHeight > oldscrollHeight){
                    $("#chatbox").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div
                }                
              },
        });
    }
    setInterval (loadLog, 2500);    //Reload file every 2.5 seconds
    
    //If user wants to end session
    $("#exit").click(function(){
        var exit = confirm("Are you sure you want to end the session?");
        if(exit==true){window.location = 'index.php?logout=true';}        
    });
});
</script>
<?php
}
?>
</body>
</html>
Файл post.php
PHP код:
<?
session_start
();
if(isset(
$_SESSION['name'])){
    
$text $_POST['text'];
    
    
$fp fopen("log.html"'a');
    
fwrite($fp"<div class='msgln'>(".date("g:i A").") <b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>");
    
fclose($fp);
}
?>
Файл log.html
Код HTML:
Пустой
С меня плюс в репу...
Есть три способа отвечать на вопросы: сказать необходимое, отвечать с приветливостью и – наговорить лишнего
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
moshkin_ura вне форума Ответить с цитированием
Старый 14.03.2012, 09:18   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Код HTML пустым оставлять нельзя. По умолчанию кодировка идёт в UTF8, а нужно windows 1251. Поставьте в начале HTML такой код:
Код:
<HTML lang="ru" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:v="urn:schemas-microsoft-com:vml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
А отзыв в репу поставить не получится. У Вас репа маленькая .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 14.03.2012 в 18:47.
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.03.2012, 09:37   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

всегда думал что достаточно
Цитата:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
ADSoft вне форума Ответить с цитированием
Старый 14.03.2012, 09:42   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

а проблемы - с кодировкой, так как Ajax запросы jquery - идут в utf8 всегда
или все делайте в utf8, или при выводе в js - принудительно задавайте header() с кодировкой 1251
ADSoft вне форума Ответить с цитированием
Старый 14.03.2012, 09:42   #5
moshkin_ura
Web Studio "БЕЛКО"
Форумчанин
 
Аватар для moshkin_ura
 
Регистрация: 15.08.2011
Сообщений: 180
Вопрос

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Код HTML:
<HTML lang="ru" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:v="urn:schemas-microsoft-com:vml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
А отзыв в репу поставить не получится. У Вас репа маленькая :d.
Не работает... Может надо каждый файл в UTF-8 сделать???
Есть три способа отвечать на вопросы: сказать необходимое, отвечать с приветливостью и – наговорить лишнего
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
moshkin_ura вне форума Ответить с цитированием
Старый 14.03.2012, 09:45   #6
moshkin_ura
Web Studio "БЕЛКО"
Форумчанин
 
Аватар для moshkin_ura
 
Регистрация: 15.08.2011
Сообщений: 180
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
а проблемы - с кодировкой, так как Ajax запросы jquery - идут в utf8 всегда
или все делайте в utf8, или при выводе в js - принудительно задавайте header() с кодировкой 1251
Щяс попробую...
[Добавленно через 5 минут ]
Что-то я непонел что нужно сделать)))
Есть три способа отвечать на вопросы: сказать необходимое, отвечать с приветливостью и – наговорить лишнего
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк

Последний раз редактировалось moshkin_ura; 14.03.2012 в 09:53.
moshkin_ura вне форума Ответить с цитированием
Старый 14.03.2012, 10:02   #7
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

2 варианта
1.
Цитата:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Chat - Customer Module</title>
<meta http-equiv="Content-Type" content="text/html/php"; charset="utf8">
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
выставляем кодировку.. и все файлы php, html, txt какие используете - перекодируете в utf8
2.
Цитата:
@Header("Content-Type: text/html; charset=\"windows-1251\"");
читать тут
ADSoft вне форума Ответить с цитированием
Старый 14.03.2012, 10:55   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Приёмов масса. Но основной не в PHP, а в кодировке на странице.
Можно и в PHP кодировку сменить. Например - echo(...);
Поэкспериментируйте, всё равно лишним не будет.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.03.2012, 17:27   #9
moshkin_ura
Web Studio "БЕЛКО"
Форумчанин
 
Аватар для moshkin_ura
 
Регистрация: 15.08.2011
Сообщений: 180
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
2 варианта
1. выставляем кодировку.. и все файлы php, html, txt какие используете - перекодируете в utf8
2.

читать тут
Не работает пишет ошибку
Код:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at L:\home\local111.ru\www\chat\index.php:1) in L:\home\local111.ru\www\chat\index.php on line 2
Есть три способа отвечать на вопросы: сказать необходимое, отвечать с приветливостью и – наговорить лишнего
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
moshkin_ura вне форума Ответить с цитированием
Старый 14.03.2012, 18:53   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
всегда думал что достаточно
Не достаточно. HTML документ должен начинаться с тега <HTML>. Можно и без "хвоста". Просто, там дана дополнительная информация для парсера.
А PHP код нужно заключать между тегами <body></body>, если это HTML страница, а не страница скрипта.
Цитата:
Сообщение от moshkin_ura Посмотреть сообщение
Не работает пишет ошибку
Не ошибуку, а предупреждение. Причём предупреждение относится не к кодировке, а к сессиям с базой данных.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 14.03.2012 в 18:56.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
utf-8 -> windows-1251 Lihosvet Visual C++ 10 03.09.2022 16:37
статья - AJAX и кодировка Windows-1251 Pblog Обсуждение статей 1 23.12.2011 16:16
UTF-8 to WINDOWS-1251 Zanooda Общие вопросы Delphi 9 20.07.2011 08:13
URLEncode (windows-1251) kirsan007 Общие вопросы Delphi 2 04.05.2011 20:14
php перекодировка из utf-8 в windows-1251 world12_tk PHP 3 25.04.2010 22:55