проблема с кодировкой(криво отображаются страницы)

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
bobot
ст. прапорщик
Сообщения: 589
Зарегистрирован: 2008-05-28 20:03:17

проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение bobot » 2009-06-09 16:01:01

вот написана страничка на которой указана кодировка, но увы наверное неправильно то как-то криво работает

Код: Выделить всё

<?php
 session_start();
        @include("config.inc.php");
        #@include("functions.inc.php");
         //Необходимо подключиться к БД
         $link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
         or die("Не могу подключиться" );
         // сделать $DB текущей базой данных
         mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
         if(!$_POST['do'] OR $_POST['do'] =='') {
                 //Генерируем шестизначный ключ для капчи
                 if($_SESSION['uid'] =='') { $_SESSION['uid'] = mt_rand(100000,999999); }
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
echo "<html>\n";
echo "<head>\n";
echo "<meta http-equiv=\"Page-Enter\" content=\"revealTrans(Duration=10,Transition=9)\">\n";
echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=KOI8-U\">\n";
echo "<meta name=\"generator\" content=\"Web Page Maker\">\n";
echo "\n";
echo "<meta name=\"perevod\" content=\"aka Voevoda (www.voevoda.ucoz.ru)\">\n";
echo "\n";
echo "<style type=\"text/css\">\n";
echo "/*----------Text Styles----------*/\n";
echo ".ws6 {font-size: 8px;}\n";
echo ".ws7 {font-size: 9.3px;}\n";
echo ".ws8 {font-size: 11px;}\n";
echo ".ws9 {font-size: 12px;}\n";
echo ".ws10 {font-size: 13px;}\n";
echo ".ws11 {font-size: 15px;}\n";
echo ".ws12 {font-size: 16px;}\n";
echo ".ws14 {font-size: 19px;}\n";
echo ".ws16 {font-size: 21px;}\n";
echo ".ws18 {font-size: 24px;}\n";
echo ".ws20 {font-size: 27px;}\n";
echo ".ws22 {font-size: 29px;}\n";
echo ".ws24 {font-size: 32px;}\n";
echo ".ws26 {font-size: 35px;}\n";
echo ".ws28 {font-size: 37px;}\n";
echo ".ws36 {font-size: 48px;}\n";
echo ".ws48 {font-size: 64px;}\n";
echo ".ws72 {font-size: 96px;}\n";
echo ".wpmd {font-size: 13px;font-family: 'Arial';font-style: normal;font-weight: normal;}\n";
echo "/*----------Para Styles----------*/\n";
echo "DIV,UL,OL /* Left */\n";
echo "{\n";
echo " margin-top: 0px;\n";
echo " margin-bottom: 0px;\n";
echo "}\n";
echo "</style>\n";
echo "\n";
echo "<style type=\"text/css\">\n";
echo "div#container\n";
echo "{\n";
echo "  position:relative;\n";
echo "  width: 777px;\n";
echo "  margin-top: 0px;\n";
echo "  margin-left: auto;\n";
echo "  margin-right: auto;\n";
echo "  text-align:left; \n";
echo "}\n";
echo "body {text-align:center;margin:0}\n";
echo "</style>\n";
echo "\n";
echo "</head>\n";
echo "\n";
echo "<body bgColor=\"#EEEEEE\">\n";
echo "\n";
echo "<div id=\"container\">\n";
echo "<div id=\"text1\" style=\"position:absolute; overflow:hidden; left:131px; top:213px; width:484px; height:54px; z-index:0\"><div class=\"wpmd\">\n";
echo "<div align=center><font color=\"#FF0000\">Увага! Запустіть клієнт та виконайте вхід в систему&nbsp; Authproxy перед </font></div>\n";
echo "<div align=center><font color=\"#FF0000\">реєстрацією поштової скриньки.</font></div>\n";
echo "</div></div>\n";
echo "\n";
echo "<form action=\"\" method=\"POST\">\n";
echo "<input name=\"nick\" type=\"text\" style=\"position:absolute;width:200px;left:279px;top:275px;z-index:2\">\n";
echo "<input name=\"pass\" type=\"password\" style=\"position:absolute;width:200px;left:280px;top:324px;z-index:3\">\n";
echo "<input name=\"rpass\" type=\"password\" style=\"position:absolute;width:200px;left:281px;top:374px;z-index:4\">\n";
echo "<input name=\"fac\" type=\"text\" style=\"position:absolute;width:200px;left:281px;top:422px;z-index:5\">\n";
echo "<input name=\"do\" type=\"submit\" value=\"реєстрація\" style=\"position:absolute;left:329px;top:484px;z-index:6\">\n";
echo "</form>\n";
echo "\n";
echo "<div id=\"text2\" style=\"position:absolute; overflow:hidden; left:237px; top:276px; width:41px; height:21px; z-index:7\"><div class=\"wpmd\">\n";
echo "<div><font class=\"ws12\" face=\"Times New Roman\"><B><U>Логін</U></B></font></div>\n";
echo "</div></div>\n";
echo "\n";
echo "<div id=\"text3\" style=\"position:absolute; overflow:hidden; left:224px; top:326px; width:57px; height:20px; z-index:8\"><div class=\"wpmd\">\n";
echo "<div><font class=\"ws12\" face=\"Times New Roman\"><B><U>Пароль</U></B></font></div>\n";
echo "</div></div>\n";
echo "\n";
echo "<div id=\"text4\" style=\"position:absolute; overflow:hidden; left:166px; top:376px; width:116px; height:20px; z-index:9\"><div class=\"wpmd\">\n";
echo "<div><font class=\"ws12\" face=\"Times New Roman\"><B><U>Підтвердження</U></B></font></div>\n";
echo "</div></div>\n";
echo "\n";
echo "<div id=\"text5\" style=\"position:absolute; overflow:hidden; left:198px; top:424px; width:85px; height:22px; z-index:10\"><div class=\"wpmd\">\n";
echo "<div><font class=\"ws12\" face=\"Times New Roman\"><B><U>Факультет</U></B></font></div>\n";
echo "</div></div>\n";
echo "\n";
echo "<div id=\"marquee1\" style=\"position:absolute; overflow:hidden; left:112px; top:7px; width:553px; height:28px; z-index:11\">\n";
echo "<marquee width=\"553\" height=\"28\">\n";
echo "<div class=\"wpmd\">\n";
echo "<div><font class=\"ws12\" color=\"#0000FF\" face=\"Times New Roman\"><B>Сторінка реєстрації поштової скриньки Київського національного університету імені Т.Шевченка</B></font></div>\n";
echo "</div></marquee>\n";
echo "</div>\n";
echo "\n";
echo "<div id=\"image1\" style=\"position:absolute; overflow:hidden; left:289px; top:40px; width:192px; height:168px; z-index:12\"><img src=\"gerbyura.png\" alt=\"\" border=0 width=192 height=168></div>\n";
echo "\n";
echo "<div id=\"text6\" style=\"position:absolute; overflow:hidden; left:479px; top:276px; width:100px; height:23px; z-index:13\"><div class=\"wpmd\">\n";
echo "<div><font class=\"ws12\" face=\"Times New Roman\"><B>@univ.kiev.ua</B></font></div>\n";
echo "</div></div>\n";
echo "\n";
echo "\n";
echo "</div></body>\n";
echo "</html>\n";
}
include 'proba.php';
//если кнопка нажата
if($_POST['do']) {
if  (!$user_id == 0) {
$login = $_POST['nick'];
$a = '@newmail.univ.kiev.ua';
$nick = $_POST['nick'].$a;
$r = @mysql_query("SELECT * FROM users WHERE nick='".strtolower($nick)."'");
//Проверка результата запроса
if(mysql_num_rows($r)==0) {
//Проверка ввведенных паролей
if($_POST['pass'] !='' AND $_POST['rpass'] !='' AND $_POST['pass'] === $_POST['rpass']){
//Осуществляем регистарацию
//Генерируем uniq_id
$uniq_id = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].mktime());
$pass = $_POST['pass'];
#$email = $_POST['mail'];
//Создаем запрос для записи данных в БД
$r = @mysql_query("INSERT INTO users
VALUES(NULL,'".strtolower($nick)."','".md5($pass)."','".$email."','".$uniq_id."',0,'".date("dmY")."','".date("dmY")."','".$user_id."')");
echo 'вы зарегистрировались успешно:для входаперейдите поссылке <br/><ahref="index.php"/>вход</a>';
} else {echo 'Регистрация невозможна: Введенные пароли не совпадают<br/><a href="registration1.php"/>назад</a>';}
} else {echo 'Регистрация невозможна: Пользователь с таким именем уже существует<br/><a href="registration1.php"/>назад</a>';';}
} else {echo "Запустіть клієнт та виконайте вхід в систему Authproxy перед реєстрацією поштової скриньки";}
}
?>
                                

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

lerryc
сержант
Сообщения: 191
Зарегистрирован: 2008-07-10 7:28:37
Откуда: Vladivostok

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение lerryc » 2009-06-11 4:47:51

bobot писал(а):вот написана страничка на которой указана кодировка, но увы наверное неправильно то как-то криво работает
работает правильно, но не так как вы ожидали, естественно.
проблема решена уже ?
машина думать не может, машина должна ехать

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение zg » 2009-06-11 5:10:07

lerryc писал(а):проблема решена уже ?
проблема кодировки базы и скрипта решена ещё в MySQL 4.1.11 и выглядит примерно так

Код: Выделить всё

<?php
mysql_connect(...);
mysql_query('SET names koi8u');
mysql_query('SELECT ...');
...
?>
при условии, конечно, что данные были внесены в верной кодировке.

Тема поднималась неоднократно.

lerryc
сержант
Сообщения: 191
Зарегистрирован: 2008-07-10 7:28:37
Откуда: Vladivostok

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение lerryc » 2009-06-11 5:32:47

zg писал(а):
lerryc писал(а):проблема решена уже ?
проблема кодировки базы и скрипта решена ещё в MySQL 4.1.11 и выглядит примерно так
имхо, немного не так
насколько я понял из приведенного автором куска, речь идет о корявостях вывода в броузере(ах)
а это, как я понимаю, связано с бардаком в кодировках сервера+апача+сайта+базы
непонятно почему не принята UTF-8, но из того, что написано, я понял, что автор хочет принудить клиента принять KOI8-U, а на самом деле у клиента украинский не отображается (и не мог отобразиться, имхо, в таком изложении)
может чего и не правильно понял, бывает....
машина думать не может, машина должна ехать

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение zg » 2009-06-11 5:52:15

lerryc писал(а):насколько я понял из приведенного автором куска, речь идет о корявостях вывода в броузере(ах)
гм... дак тоже обсуждалось и не раз http://anton-pribora.ru/articles/php/lo ... conclusion
lerryc писал(а):и не мог отобразиться, имхо, в таком изложении
почему? если апач не передаёт кодировку через заголовки, то будет использован метатэг

lerryc
сержант
Сообщения: 191
Зарегистрирован: 2008-07-10 7:28:37
Откуда: Vladivostok

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение lerryc » 2009-06-11 8:49:28

zg писал(а):почему? если апач не передаёт кодировку через заголовки, то будет использован метатэг
ответ в приведенной тобою ссылке ;)
апач будет (должен) отдавать в той кодировке, в какой его просит клиент

а чтоб апач не вмешивался со своими (пере)кодировками первым выводом до всех "echo" должен быть посыл header() с указанием локали.

но при этом скрипт сам должен позаботиться о перекодировке в нужную локаль до вывода в поток ("echo")

хотя вывод (перекодировка) через буфер (ob_start () как по ссылке) - более кашерно, но, к сожалению, менее понятна для новичков.
машина думать не может, машина должна ехать

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение zg » 2009-06-11 15:21:19

lerryc писал(а):а чтоб апач не вмешивался со своими (пере)кодировками первым выводом до всех "echo" должен быть посыл header() с указанием локали.
гм... а локаль-то тут при чём? тут апач решает, что куда и откуда. Именно в настройках апача может стоять и перекодировка, и кодировка по-умолчанию, и кодировка по принуждению. Если апач настроен криво, пхп бессилен.
lerryc писал(а):хотя вывод (перекодировка) через буфер (ob_start () как по ссылке) - более кашерно, но, к сожалению, менее понятна для новичков.
перекодировка через буфер нужна в очень редких случаях, когда используется разнородное исходное содержимое, которое нужно отдать в единой кодировке.

lerryc
сержант
Сообщения: 191
Зарегистрирован: 2008-07-10 7:28:37
Откуда: Vladivostok

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение lerryc » 2009-06-11 16:42:21

zg писал(а):гм... а локаль-то тут при чём? тут апач решает, что куда и откуда. Именно в настройках апача может стоять и перекодировка, и кодировка по-умолчанию, и кодировка по принуждению. Если апач настроен криво, пхп бессилен.
Хостер предоставил хостинг, а "злобные" хостерные админы настроили системную локаль KOI8-R
Но бедный я, живущий в оффтопике, всю офф-лайн разработку веду в WIN1251, и сайты лежат в этой кодировке
Но иногда, очень редко иногда, возникает необходимость выводить мультиязыковую кашу на одной странице, а поэтому некоторые таблицы в базе и их обслуживающие страницы лежат в UTF8
Апач настроен (злобными админами) на кодировку по умолчанию UTF8

Приходит клиент из ближнего (и не очень) зарубежья, у которого в настройках броузера настроена кодировка по умолчанию какая-нибудь KOI8-U

И что он получит по экрану в таком случае?

Однозначно трудно ответить однозначно.

ПХП тут нужен на тот случай, если я хочу какого-либо китайца научить украйнскому без использования UTF'а - то путь один - скриптом подготовить (перекодировать) нужную информацию в нужной кодировке и довести этот результат в неизменном виде до монитора клиента.

Так?

Тут налицо конфликт интересов - клиент просит GB1254 - апач отвечает получи UTF8, думая что он отконвертирует из 1251, а скрипт в поток валит KOI8

(так я понял проблему автора)

В результате броузер в хеадерах (от апача) получает "жди документ в UTF8", а в заголовках самого документа указано charset KOI8, а сам текст х.з. в чём

Как выйти из ситуации?

Возможный вариант разрешения конфликта есть в той ссылке, что ты привел ранее.
zg писал(а): перекодировка через буфер нужна в очень редких случаях, когда используется разнородное исходное содержимое, которое нужно отдать в единой кодировке.
мне так и показалось, что тут тот самый "редкий случай"

ps/ ;)
так, что мы тут мило пообщались в отсутствие проблемомастера, и, думаю, путь куда и как указали.
тему, наверное, можно пометить как "решено"
;)
машина думать не может, машина должна ехать

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: проблема с кодировкой(криво отображаются страницы)

Непрочитанное сообщение zg » 2009-06-11 18:55:02

lerryc писал(а):Однозначно трудно ответить однозначно.
почему трудно? вполне легко и логично :smile: та кодировка, что передаётся в заголовке ответа считается приоритетной по отношению к той, что указана в теле.
К примеру

Код: Выделить всё

zg# wget -S --spider anton-pribora.ru -o /dev/stdout | grep char
  Content-Type: text/html; charset=UTF-8
zg#
говорит браузеру о том, что тело ответа сформированно в UTF-8. Всё остальное остаётся за кадром.