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

Форум MySQL

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

 

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

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

тема: Искажение кодировки при выводе в HTML
 
 автор: Сквиртел13   (31.05.2006 в 15:55)   письмо автору
 
 

У меня проблема с кодировкой когда я перенашу данные из БД на html страничку. Вместо русских букв иероглифы. Пожалуйста подскажите как мне настроить правильно кодировку или намекните где это можно прочитать. Мне это очень срочно нужно! Заранее всем спасибо кто откликнится!!!

   
 
 автор: kadet_73   (31.05.2006 в 16:39)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 15:55)
 

А в базе данных, данные как выглядит?

   
 
 автор: Сквиртел13   (31.05.2006 в 18:26)   письмо автору
 
   для: kadet_73   (31.05.2006 в 16:39)
 

В бд они выглядят нормально

   
 
 автор: Trianon   (31.05.2006 в 18:37)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 18:26)
 

Вопрос некорректен.
В БД данные умеют только лежать. Либо уже искаженными либо еще нет.
Выглядеть в БД они не умеют. Храниться они там могут, а выглядеть - нет.
Выглядеть они могут только в одном из клиентов.
Клиент - это своего рода окошко, через которое можно писать данные и читать (т.е. глядеть на) их.
Так вот, чтобы данные выглядели нормально, их надо читать и писать с одинаковыми настройками клиентов. Поскольку пишите Вы их через консоль (а таблица консоли ище с ДОСовых времен была cp866) а читаете в эксплорере, а он обычно настроен на cp1251,
то данные записанные таким образом всегда будут выглядеть в html искаженными, как бы Вы не пытались что-то настроить.

   
 
 автор: Сквиртел13   (31.05.2006 в 18:45)   письмо автору
 
   для: Trianon   (31.05.2006 в 18:37)
 

И как же решить эту проблему? Мне же надо данные как то выводить на html страничку

   
 
 автор: Trianon   (31.05.2006 в 18:49)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 18:45)
 

Вводите данные со своей же html-странички.
Тогда они будут выводиться нормально.
Или как вариант, работайте через phpMyAdmin, указав там, 1251 в качестве рабочей кодовой страницы.
Впрочем я Вам это уже советовал.

   
 
 автор: Сквиртел13   (31.05.2006 в 18:55)   письмо автору
 
   для: Trianon   (31.05.2006 в 18:49)
 

А как вводить данные со своей html странички.
А на счет phpMyAdmin я помню что Вы советовали, но мне надо научиться сначало так делать.

   
 
 автор: Trianon   (31.05.2006 в 18:58)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 18:55)
 

какая у Вас структура таблицы, и что туда нужно вводить?
проще на примере показать.

   
 
 автор: Сквиртел13   (31.05.2006 в 19:02)   письмо автору
 
   для: Trianon   (31.05.2006 в 18:58)
 

Любая таблица с любыми данными. Мне просто нужно понять сам смысл как это делается, а дальше я сама.

   
 
 автор: Trianon   (31.05.2006 в 21:03)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 19:02)
 

Вот тот минимум, который я смог придумать.

<?
include 'config.inc.php';
    
$self $_SERVER['PHP_SELF'];
    
$table 'adr';  // имя таблицы
    
if (0) {}
    else if(isset(
$_REQUEST['update']) ) // если запрос на обновление записи
    
{
        
$name=$_REQUEST['name'];
        
$msg=$_REQUEST['msg'];
        if(
get_magic_quotes_gpc())
        {
            
$name stripslashes($name);
            
$msg  stripslashes($msg);
        }

        
$id intval($_REQUEST['update']);

        
$name mysql_escape_string($name);
        
$msg mysql_escape_string($msg);

        
$sql "UPDATE $table SET name='$name', msg = '$msg' WHERE id = $id";
        if(!(
$res mysql_query($sql)))
            exit(
"Error in $sql : <br>"mysql_error());
        if(!
mysql_affected_rows())
            exit(
"No record (id = $id)");

        echo 
"Record $id succesfully updated<br>\r\n";
    }
    else if(isset(
$_REQUEST['insert']) ) // если запрос на добавление записи
    
{
        
$name=$_REQUEST['name'];
        
$msg=$_REQUEST['msg'];
        if(
get_magic_quotes_gpc())
        {
            
$name stripslashes($name);
            
$msg  stripslashes($msg);
        }

        
$name mysql_escape_string($name);
        
$msg mysql_escape_string($msg);

        
$sql "INSERT INTO $table (name,msg) VALUES ('$name','$msg')";
        if(!(
$res mysql_query($sql)))
            exit(
"Error in $sql : <br>"mysql_error());
        
$id mysql_insert_id();
        echo 
"Record succesfully inserted with id = $id<br>\r\n";
    }
    else if(isset(
$_REQUEST['delete']) ) // если запрос на удаление записей
    
{
        
$del $_REQUEST['delete'];
        if(
is_array($del))
           foreach(
$del as $k => $v$del[$k] = intval($v);
        else
           
$del = array(intval($del));
        
$del implode(',',$del);
        
$sql "DELETE FROM $table WHERE id IN ($del)";
        if(!(
$res mysql_query($sql)))
            exit(
"Error in $sql : <br>"mysql_error());
        
$num mysql_affected_rows();
        echo 
"$num record(s) deleted: $del<br>\r\n";
    }else if(isset(
$_REQUEST['edit']) ) // если запрос на редактирование строки
    
{
        
$id intval($_REQUEST['edit']);
        
$sql "SELECT * FROM $table WHERE id = $id";
        if(!(
$res mysql_query($sql)))
            exit(
"Error in $sql : <br>"mysql_error());
        if(!(
$row mysql_fetch_assoc($res)))
            exit(
"No record (id = $id)");
        { 
// формируем запрос на обновление записи
           
?>
              <table border=1><form action=<?=$self?> method=post>
              <tr><td> id </td>
              <input type=hidden name=update value=<?= $row['id']?> >
              <td><?= $row['id']?></td></tr>
              <tr><td> Name </td><td>
              <input size=5 name=name value=<?=
                  
'"'.htmlspecialchars($row['name']).'"';?> ></td></tr>
              <tr><td> Message </td><td>
              <input size=60 name=msg value=<?=
                  
'"'.htmlspecialchars($row['msg']).'"';?> ></td></tr>
              <tr><td> </td><td>
              <input type=submit value=Update></td></tr>
              </form></table>
           <?
           
exit();
        }
    }

    
//---- вывод таблицы ---- общая часть
    
{
        
$sql "SELECT * FROM $table";
        if(!(
$res mysql_query($sql)))
            exit(
"Error in $sql : <br>"mysql_error());
        {  
?>
              <table border=1><form method=post><tr>
              <td>  </td>
              <td> id </td>
              <td> Name </td>
              <td> Message </td>
              </tr>
           <?
        
}
        while(
$row mysql_fetch_assoc($res))
        {
           
?>
              <tr>
              <td>
                <input type=checkbox name=delete[] value=<?= $row['id']?> >
              </td>
              <td><a href=?edit=<?= $row['id']?> alt=edit ><?= $row['id']?> </a>
              </td>
              <td><?=
                  
'"'.htmlspecialchars($row['name']).'"';?> </td>
              <td><?=
                  
'"'.htmlspecialchars($row['msg']).'"';?> </td>
              </tr>
            <?
        
}
        {
            
?>
              <tr><td colspan=4>
              <input type =submit value='delete selected rows'>
              </td></tr>
              </form></table> <hr>
              Insert new record there:<br>
              <table border=1><form method=post>
              <tr><td> Name </td><td>
              <input size=5 name=name ></td></tr>
              <tr><td> Message </td><td>
              <input size=60 name=msg ></td></tr>
              <tr><td>  </td><td>
              <input type=submit name=insert value=insert ></td></tr>
              </form></table>

            <?
        
}
    }


?>


Таблица создается так:

CREATE TABLE adr (
  id int(11) NOT NULL auto_increment,
  name varchar(20) default NULL,
  msg tinytext,
  PRIMARY KEY  (id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

   
 
 автор: noob   (31.05.2006 в 21:43)   письмо автору
 
   для: Trianon   (31.05.2006 в 21:03)
 

в 44 строке помоему ошибка.
вместо

exit("Error in $sql : <br>". mysql_query());

надо

exit("Error in $sql : <br>". mysql_error());

но это не важно конечно.... важно следующее.
С английскими буквами скрипт работает отлично. Но если вводить русские слова, то ошибка опять:

Error in INSERT INTO adr (name,msg) VALUES ('sdf','фыва') :
Data too long for column 'msg' at row 1

   
 
 автор: Trianon   (31.05.2006 в 22:09)   письмо автору
 
   для: noob   (31.05.2006 в 21:43)
 

Насчет mysql_query() - спасибо, я исправил. Там было штук пять таких.
А что касается русского, то виноват не скрипт . Все настройки соединения выполняются в конфиг-файле:
У меня там ничего необычного нет. Только
mysql_connect($server, $user, $password);
mysql_select_db($database);
Естественно с проверкой ошибок.
Даже пресловутые
// mysql_query ("set character_set_client='cp1251'");
// mysql_query ("set character_set_results='cp1251'");
// mysql_query ("set collation_connection='cp1251_general_ci'");
и то закомментарены.
Единственное, что, вероятно, играет роль, так это то, что $user у меня не равно 'root'
Рутовый пользователь в некоторых версиях MySQL требует настройки кодовой таблицы.
Скрипт абсолютно рабочий, я проверил все ветки.

   
 
 автор: noob   (31.05.2006 в 22:14)   письмо автору
 
   для: Trianon   (31.05.2006 в 22:09)
 

а никто не спорит что у тебя он рабочий) проблема как раз в том что у нас(почему то мне кажется что у сквиртел13 то же самое будет) не работает). и мы не знаем че делать.. :(

   
 
 автор: Сквиртел13   (01.06.2006 в 14:54)   письмо автору
 
   для: Trianon   (31.05.2006 в 21:03)
 

Спасибо за пример. Я сейчас его попробую.

   
 
 автор: noob   (31.05.2006 в 16:45)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 15:55)
 

тут много раз писали что надо mysql_query("set names 'cp1251';") сделать.
а ты как данные в бд записывал? через пхп?

   
 
 автор: Сквиртел13   (31.05.2006 в 18:28)   письмо автору
 
   для: noob   (31.05.2006 в 16:45)
 

Я записывалА данные:
сначала создавала таблицу в консоле а потом через PHP выводила их на страницу

   
 
 автор: noob   (31.05.2006 в 18:37)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 18:28)
 

а что появляется если записать через php? русский текст записать.

   
 
 автор: Сквиртел13   (31.05.2006 в 18:47)   письмо автору
 
   для: noob   (31.05.2006 в 18:37)
 

Я не поняла. Как русский текст записать через php&

   
 
 автор: noob   (31.05.2006 в 18:49)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 18:47)
 

ну так же как через консоль, только через пхп.

mysql_query("INSERT ........");

   
 
 автор: Сквиртел13   (31.05.2006 в 18:52)   письмо автору
 
   для: noob   (31.05.2006 в 18:49)
 

Я новичок и поэтому еще всего не знаю.
Я в консоле создала таблицу с данными, потом написала скрипт и вывела эти данные в html страничку. Они вывелись но русские буквы заменились иероглифами. Как по другому вывести данные из таблицы я пока не знаю. Может ты подскажешь?

   
 
 автор: noob   (31.05.2006 в 19:06)   письмо автору
 
   для: Сквиртел13   (31.05.2006 в 18:52)
 

просто у меня такая же хрень =)
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=18286&page=1

   
 
 автор: Сквиртел13   (31.05.2006 в 19:07)   письмо автору
 
   для: noob   (31.05.2006 в 19:06)
 

Понятно)) Давай так как найдешь ответ сообщи мне я тоже когда найду обязательно сообщу!)))

   
Rambler's Top100
вверх

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