Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: "Кодировка не распознана"
 
 автор: Владимир55   (04.03.2010 в 13:08)   письмо автору
 
 

ЯндексВэбмастер исключил из индекса более сотни страниц, вынеся вердикт "Кодировка не распознана". Этой диагностике Яндекс дает такое разъяснение:
"Кодировка не распознана - Кодировка документа не распознана. Возможно, документ не содержит текста или содержит текст в различных кодировках".

Все страницы как братья-близнецы по своей структуре. Код абсолютно валидный. Начало кода такое:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <title>Америка </title>
        <style type="text/css">
        body,html{


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

Может, можно как-то протестировать страницу средствами рнр?

  Ответить  
 
 автор: Trianon   (04.03.2010 в 22:15)   письмо автору
 
   для: Владимир55   (04.03.2010 в 13:08)
 

В заголовке отклика что выдается?
Не в левом куске тела, а в поле Content-Type заголовка?

Оное обычно определяется директивой addDefaultCharset в конфиге апача или .htaccess если есть.

  Ответить  
 
 автор: Владимир55   (04.03.2010 в 23:49)   письмо автору
 
   для: Trianon   (04.03.2010 в 22:15)
 

"В заголовке отклика что выдается? "

Как это посмотреть?

  Ответить  
 
 автор: Саня   (04.03.2010 в 23:56)   письмо автору
54.3 Кб
 
   для: Владимир55   (04.03.2010 в 23:49)
 

Специальными плагинами к браузерам. Например "web developer" в фаерфоксе.

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 00:27)   письмо автору
 
   для: Саня   (04.03.2010 в 23:56)
 

Ответ более, чем неожиданный - кодировки и правда нет!

Server: nginx/0.7.65
Date: Thu, 04 Mar 2010 21:24:48 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.12
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

200 OK


И как это понимать?

Придется поискать addDefaultCharset ...

  Ответить  
 
 автор: Trianon   (05.03.2010 в 01:00)   письмо автору
 
   для: Владимир55   (05.03.2010 в 00:27)
 

>Ответ более, чем неожиданный - кодировки и правда нет!
>И как это понимать?

>Придется поискать addDefaultCharset ...
Придется поставить addDefaultCharset ...

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 01:09)   письмо автору
 
   для: Trianon   (05.03.2010 в 01:00)
 

Тут нюанс в том, что некоторое время назад я удалил ddDefaultCharset, ибо иначе не работал Аякс (поскольку сайт в 1251).

Вот как теперь быть??!

  Ответить  
 
 автор: Trianon   (05.03.2010 в 01:16)   письмо автору
 
   для: Владимир55   (05.03.2010 в 01:09)
 

Аякс действительно очень плохо сопрягается с 1251.
Но ведь addDefaultCharset действует лишь на те скриптом порождаемые документы, в которых Content-Type не формируется явным образом.
По-моему, аяксовых обработчиков не должно быть настолько много, чтобы совсем невозможно было в них добавить явное указание типа контента с расово верной кодировкой utf-8 .
Или у Вас и тексты аякс-обработчиков тоже скриптами создаются миллионными тиражами?

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 01:38)   письмо автору
 
   для: Trianon   (05.03.2010 в 01:16)
 

Да, тиражируются.

Скрипт вызова такого вида:
<?php
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>'
;
echo <<<TEXT
<div id="content"></div>
<script src="../../../jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$.get("../../ajax-1.php?fam=
$famm", function(data){
$('#content').html(data);
});
</script>
TEXT; 


А вызывает он примерно это:
<?php
    $data 
'<p class="s10s">Алфавитный рейтинг:</p>';
    echo 
$data iconv('cp1251''utf-8'$data);


Вы имеете в виду, что страницы, использующие аякс, переделать под utf-8?
Это была бы катастрофа...

  Ответить  
 
 автор: Trianon   (05.03.2010 в 01:55)   письмо автору
 
   для: Владимир55   (05.03.2010 в 01:38)
 

>А вызывает он примерно это:
> $data = '<p class="s10s">Алфавитный рейтинг:</p>';
> echo $data = iconv('cp1251', 'utf-8', $data);

А более точно?

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 02:14)   письмо автору
 
   для: Trianon   (05.03.2010 в 01:55)
 

А прямо так оно и есть.

Вся страница написана в 1251, и лишь несколько фрагментов текста (три фрагмента), которые не должны видеть поисковики, вставляются через яакс.

Получается так:
Заголовок страницы, включая DOCTYPE и charset=windows-1251.
Текст 1251
Вызов Аякс
Текст 1251
Вызов аякс
Текст 1251
Вызов Аякс
Текст 1251

  Ответить  
 
 автор: Trianon   (05.03.2010 в 02:16)   письмо автору
 
   для: Владимир55   (05.03.2010 в 02:14)
 

прямо так быть не может. потому что между html-кодом и php-кодом еще есть теги обрамления php . как минимум.

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 02:20)   письмо автору
 
   для: Trianon   (05.03.2010 в 02:16)
 

На странице 600 строк, плюс инклуды. Я бы привел ее полностью, но громоздко и даже собрать сходу не могу. Выборку с тегами попробую.

  Ответить  
 
 автор: Trianon   (05.03.2010 в 02:27)   письмо автору
 
   для: Владимир55   (05.03.2010 в 02:20)
 

меня бы вполне устроило
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<?php

  $data 
'<p class="s10s">Алфавитный рейтинг:</p>';
   echo 
$data iconv('cp1251''utf-8'$data);

?>
<html>


и я бы ответил:
<?php

header
('Content-type: text/html; charset="utf-8"'); // !!!!!!!!!!

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<?php

  $data 
'<p class="s10s">Алфавитный рейтинг:</p>';
   echo 
$data iconv('cp1251''utf-8'$data);

?>
<html>

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 02:30)   письмо автору
 
   для: Trianon   (05.03.2010 в 02:27)
 

У меня все же не так. Вот в сокращенном виде:
<?php

    
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>'
;

    echo 
"ТАЙТЛЫ";
    
    echo 
'</title>
<link href="../../../styl.css" rel="stylesheet" type="text/css">
</head>

<body>'
;

include 
"../../../db-st.php" ;

    echo 
'<table class="dva" width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
    <H1>'
$famr' </H1>
    <H2>'
$mt[$nt2], ". "$mt[$nt1], "."' </H2>
    </td>
  </tr>
  </table>'
;

    
$famm rawurlencode($famr);

    echo <<<TEXT
<div id="content"></div>
<script src="../../../jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$.get("../../ajax-1.php?fam=
$famm", function(data){
$('#content').html(data);
});
</script>
TEXT;


    echo 
'
    <div align="center">
    <table border="0" id="table6" style="border-collapse: collapse">
        <tr>
            <td>'
;

    for (
$i=0$i count ($m_1); $i++)
    echo 
'<p class="s10"><span class="s8">'$m_1[$i], '</span> - '$m_2[$i], ' ('$m_3[$i], ', '$m_4[$i], ', '$m_5[$i], '),</p>';

    echo 
'
            </td>
        </tr>
    </table>
    </div>'
;

    echo <<<TEXT
<div id="content2"></div>
<script type="text/javascript">
$.get('../../ajax-2.php', function(data){
$('#content2').html(data);
});
</script>
TEXT;

    echo 
'
    <div align="center">
    <table border="0" id="table7" style="border-collapse: collapse">
    <tr>
        <td><p class="s10">'
$re[0],  '</p></td>
        <td><p class="s10">'
$re[50], '</p></td>
    </tr>
</table>
</div>'
;

?>

</body>
</html>


А вызываемые файлы такие:
<?php 
    $data 
'<p class="s10s">Алфавитный рейтинг:</p>'
    echo 
$data iconv('cp1251''utf-8'$data); 

  Ответить  
 
 автор: Trianon   (05.03.2010 в 02:34)   письмо автору
 
   для: Владимир55   (05.03.2010 в 02:30)
 

мету выкинуть в задницу.

Редактор, который без меты жить не может, выкинуть в задницу.


header поставить сразу после <?php

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 02:37)   письмо автору
 
   для: Trianon   (05.03.2010 в 02:34)
 

Именно
header('Content-type: text/html; charset="utf-8"');

То есть, страница перейдет в кодировку utf-8 ?

  Ответить  
 
 автор: Trianon   (05.03.2010 в 02:41)   письмо автору
 
   для: Владимир55   (05.03.2010 в 02:37)
 

Вы вроде как в момент времени (05.03.2010 в 00:27) некий струмент для проверки надыбали...
Так проверьте чтоли...

  Ответить  
 
 автор: oliss   (05.03.2010 в 02:22)   письмо автору
 
   для: Владимир55   (04.03.2010 в 13:08)
 

ИМХО, делаю на многих проектах не-было НИКОГДА проблем :
addDefaultCharset вообще не трогать закоментировать #
Перевести всё в utf-8 без BOM --пропадут ВСЕ проблемы (особенно актуально будет в php 6) и с аяксом тоже.
Оптимальный DOCTYPE на сегодня :
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

В точке входа принудительно прописать хидер кодировки header('Content-Type: text/html; charset=utf-8');
Ну и естественно переконвертировать БД в новую кодировку.
Указать конект mysql_query("SET NAMES 'utf8'");
Сохранять все документы в utf-8 без BOM

Мне больше нравится инструмент LiveHTTPHeaders
https://addons.mozilla.org/ru/firefox/addon/3829?src=reco

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 14:22)   письмо автору
 
   для: oliss   (05.03.2010 в 02:22)
 

Не могли бы Вы привести пример всей страницы, выполненной на utf-8 ?

Что бы там были тайтлы и хотя бы пара строк текста (без базы).

  Ответить  
 
 автор: oliss   (05.03.2010 в 16:41)   письмо автору
 
   для: Владимир55   (05.03.2010 в 14:22)
 

Точка входа ,куда посредством сервера перекидываем все запросы к сайту
index.php
<?php 
header
('Content-Type: text/html;charset=utf-8');            // Кодировка
header ('Expire: Mon, 4 Apr 1995 01:01:01 GMT');            // Дата в прошлом
header('Cache-Control: no-cache, must-revalidate');         // HTTP/1.1
header('Pragma: no-cache');                                 // HTTP/1.1
header('Last-Modified: '.gmdate('D, d M Y H:i:s').'GMT');   // Последнее изменение

// разные подключения
include_once ('data/get_magic_quotes.php');// Обработка "магических" кавычек суперглобальных массивов 
include_once ('config.php');// Файл конфигурации
include_once ('data/mysql_connect.php');// Соединение с базой данных 

// контролер 
................
ob_start();//включаем буферизацию вывода 
// Подключаем шаблон морды
if (file_exists('templates/_home.php'))include_once('templates/_home.php');
.....................

_home.php
<!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" lang="ru" xml:lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Наша главная страничка</title>
<base href="<?php echo DIR_WEB_ROOT ?>" />
<meta name="title" content="........" />
<meta name="Description" content="........"/>
<meta name="Keywords" content=".........."/>
<meta name="Robots" content="index,follow" />
<meta name="Resource-type" content="document" />

<link rel="icon" href="<?php echo DIR_WEB_ROOT ?>favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<?php echo DIR_WEB_ROOT ?>favicon.ico" type="image/x-icon" />
<style type="text/css">
<!--
                                  /* GENERAL */
*{margin:0;padding:0;}
html{font-size:100.01%;} /* - установили шрифт стандартного размера (16px). */
body{
    font-size:62.5%;/* устанавливаем размер шрифта в 10px.*/
    font-family:Verdana,Arial,Helvetica,sans-serif;
}
li{ list-style-type: none;}
img{ border: 0;}
..............
-->
</style>
</head><body>

Текст Текст Текст Текст Текст

</body></html>

  Ответить  
 
 автор: Владимир55   (05.03.2010 в 19:12)   письмо автору
 
   для: oliss   (05.03.2010 в 16:41)
 

Как полагаете, является ли верным такой код:
<?php
    header
('Content-type: text/html; charset="utf-8"');
    echo 
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>'
;
    
$data 'НАСТРоЙКа';
    echo 
iconv('cp1251''utf-8'$data);
    echo 
'</title>
    <link href="../../../styl.css" rel="stylesheet" type="text/css">
    </head>

    <body>'
;

    
$data 'Фраза в теле страницы';
     echo 
iconv('cp1251''utf-8'$data);

    echo <<<TEXT
<div id="content"></div>
<script src="../jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$.get("../ajax-1.php", function(data){
$('#content').html(data);
});
</script>
TEXT;


При этом в файле ajax-1.php
<?php
    $data 
'Фраза из Ajax';
    echo 
$data iconv('cp1251''utf-8'$data);


При отдаче страницы кодировка в заголовке присутствует.

(У меня такое впечатление, что если в .htaccess вписать
AddDefaultCharset On
AddDefaultCharset UTF-8
то header становится излишним.)

  Ответить  
 
 автор: oliss   (05.03.2010 в 22:55)   письмо автору
 
   для: Владимир55   (05.03.2010 в 19:12)
 

Да можно воспользоваться .htaccess
# Выставляем кодировку UTF-8
AddDefaultCharset UTF-8

хидеры не нужны.
Старайтесь всё что можно отдавать ХТМЛом не взваливать на плечи php, лишняя нагрузка ,да и хередок не использовать по возможности .

  Ответить  
 
 автор: Владимир55   (06.03.2010 в 09:10)   письмо автору
 
   для: oliss   (05.03.2010 в 22:55)
 

Я вот никак не могу понять, почему у Вас работает
<title>Наша главная страничка</title> 

Если страница в UTF-8, то должно быть нечто нечитаемое.

Разве не так?

  Ответить  
 
 автор: oliss   (06.03.2010 в 10:47)   письмо автору
39.5 Кб
 
   для: Владимир55   (06.03.2010 в 09:10)
 

Просто сам документ (скрипт) надо сохранять в кодировке UTF-8.

  Ответить  
 
 автор: Владимир55   (06.03.2010 в 11:05)   письмо автору
 
   для: oliss   (06.03.2010 в 10:47)
 

Просто сам документ (скрипт) надо сохранять в кодировке UTF-8.


Вот этого я никак не могу понять.
Открыл редактор (Дремвавер), создал эту страничку, при сохранении редактор подсказывает форму приведения к юникоду без BOM. Свойства у странички такие же, как и приведенные Вами.

Но русский текст в сохраненном файле читается обычным блокнотом также, как если бы была кодировка 1251.

Вообще, что значит "сохранить в кодировке"?
Я, как бы, всего лишь жму сохранить файл и даю ему имя. Что в нем есть, то и сохраняется. А что ещё можно сделать?

  Ответить  
 
 автор: oliss   (06.03.2010 в 18:52)   письмо автору
36.2 Кб
 
   для: Владимир55   (06.03.2010 в 11:05)
 

Вот панель дрима
Блокнот забудьте как страшный сон .он не работает с утф
Хотите нормальный блокнот --- Notepad++

  Ответить  
 
 автор: oliss   (06.03.2010 в 18:57)   письмо автору
54.8 Кб
 
   для: oliss   (06.03.2010 в 18:52)
 

Начальные установки дрима

  Ответить  
 
 автор: Владимир55   (06.03.2010 в 22:18)   письмо автору
 
   для: oliss   (06.03.2010 в 18:57)
 

Да, у меня тоже так.
Спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования