Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка, почему так? 
:(
    Опции темы
sssssss7
Дата 25.8.2009, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



Собственно проблемы нет я решил что хотел но хотелось бы и еще понять почему так...
в настройках по умолчанию в mysql, сама база, таблица и поле в таблице везде стоит utf-8... а так же на сайте везде стоит кодировка UTF-8 но при добавление данных (русские слова =)) через скрипт php без строчки mysql_query("set names CP1251") добавляются иероглифы.. со строчкой mysql_query("set names CP1251")  всё нормально почему так?
PM MAIL   Вверх
Ипатьев
Дата 25.8.2009, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



удивительный вопрос
казалось бы, при чем здесь CP1251...
PM MAIL   Вверх
skyboy
Дата 25.8.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(sssssss7 @  25.8.2009,  01:44 Найти цитируемый пост)
через скрипт php без строчки mysql_query("set names CP1251")

в смысле - вместо "set names cp1251" у тебя стояло "set names utf8" и все равно не работало?
PM MAIL   Вверх
sssssss7
Дата 25.8.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



Цитата(skyboy @ 25.8.2009,  09:30)
Цитата(sssssss7 @  25.8.2009,  01:44 Найти цитируемый пост)
через скрипт php без строчки mysql_query("set names CP1251")

в смысле - вместо "set names cp1251" у тебя стояло "set names utf8" и все равно не работало?

всё и везде стоит UTF-8... а php отправляет нормальный текст только со строчкой set names cp1251, а если написать set names utf8 то оправляет каракули=) почему так не догоняю? ведь везде текст в UTF-8 и на сайте в базе, таблице.

Цитата

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


Просьба не ехидничать а пояснить... я новичек так что сильно не пинайте.. 

Это сообщение отредактировал(а) sssssss7 - 25.8.2009, 21:25
PM MAIL   Вверх
IZ@TOP
Дата 25.8.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Цитата(sssssss7 @  25.8.2009,  22:18 Найти цитируемый пост)
а php отправляет нормальный текст только со строчкой set names cp1251, почему так не догоняю? 

м.б. потому, что в PHP данные приходят в кодировке cp1251?
А вообще гаданием на кофейной гуще занимаются обычно гадалки. Откуда данные, как соединяетесь с бд и т.п.? Хотите ответ - дайте больше информации.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sssssss7
Дата 25.8.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



я ж говорю есть страница index.php от туда идут данные в скрипт script.php а из него в базу... все страницы в utf-8
 
index.php
Код

<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<form action="search_info.php" method="POST">
<input type="text" name="name" /><br />
<input type="submit" value="Поиск" />
</form>

</body>
</html>


script.php
Код

<?php  
   
    $date = date("d.m.y"); //присвоено 03.12.01
    $time = date("H:i:s"); //присвоит 1 элементу массива 17:16:17
    $name = $_POST['name'];
    $dblocation = "localhost";  
    $dbname = "porshe_search";  
    $dbuser = "root";  
    $dbpasswd = "";  
    $ip = $_SERVER['REMOTE_ADDR'];
    $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);  
    if (!$dbcnx)  
      {  
        echo "<p>К сожалению, не доступен сервер mySQL</p>";  
        exit();  
      }  
  
    if (!mysql_select_db($dbname,$dbcnx) )  
      {  
        echo "<p>К сожалению, не доступна база данных</p>";  
        exit();  
      }  
   mysql_query("set names cp1251");
   $sql = "insert into info_search (date,time,ip,detal) values ('$date','$time','$ip','$name')";
        $result = mysql_query($sql);

        if ($result){
            echo "Добавлено успешно";
        } else {
            echo "There's been a problem: ".mysql_error();
        }


переменная $name

Это сообщение отредактировал(а) sssssss7 - 25.8.2009, 21:32
PM MAIL   Вверх
unicross
Дата 25.8.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



sssssss7, Вставьте в начало каждого файла строку:
Код

<?php
header("Content-Type: text/html; charset=utf-8");
?>

В файле search_info.php добавьте строки
Код

$name = $_POST['name'];
echo $name . "<br>";
echo "Проверка кодировки<br>";

Покажите результат выполнения (этих двух строк) в точном соответствии.

P.S. Данные ($name) не мешало бы обрабатывать с помощью функции mysql_real_escape_string() перед добавлением.
PM MAIL WWW   Вверх
IZ@TOP
Дата 25.8.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Ну и до кучи, вместо 
Код

mysql_query("set names cp1251");

установить соответствующую кодировку
Код

mysql_query("set names utf8");


Еще иногда полезно не плодить лишний код, особенно когда для вставки даты и времени существуют специальные функции типа NOW().
И поскольку date/time являются зарезервированными словами, не помешало бы их проэкранировать при помощи обратной кавычки (или как там ее правильно) "`date`, `time`".


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sssssss7
Дата 25.8.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



Цитата(IZ@TOP @ 25.8.2009,  22:12)
Еще иногда полезно не плодить лишний код, особенно когда для вставки даты и времени существуют специальные функции типа NOW().

а где лишний код.. если мне надо раздельно записать дату и время и именно в таком формате?

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


Код

<?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>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body>
    <form action="index.php" method="POST">
      Деталь<input type="text" name="name" /><br />
      <input type="submit" value="Поиск" />
    </form>
  </body>
</html>
<?php  
    $mydate = date("d.m.y"); //присвоено 03.12.01
    $mytime = date("H:i:s"); //присвоит 17:16:17
    $name = $_POST['name'];
    echo $name . "<br>";
    echo "Проверка кодировки<br>";
    $escape_name = mysql_real_escape_string($name);
    $dblocation = "localhost";  
    $dbname = "porshe_search";  
    $dbuser = "root";  
    $dbpasswd = "";  
    $ip = $_SERVER['REMOTE_ADDR'];
    $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);  
    if (!$dbcnx)  
      {  
        echo "<p>К сожалению, не доступен сервер mySQL</p>";  
        exit();  
      }  
  
    if (!mysql_select_db($dbname,$dbcnx) )  
      {  
        echo "<p>К сожалению, не доступна база данных</p>";  
        exit();  
      }  
   mysql_query("set names utf8");
   
   $sql = "insert into info_search (date,time,ip,detal) values ('$mydate','$mytime','$ip','$escape_name')";
        $result = mysql_query($sql);

        if ($result){
            echo "Добавлено успешно";
        } else {
            echo "Проблемка: ".mysql_error();
        }
?>


перевел сам файл notepad ++ в utf-8 всё гуд... вопрос поскажите пожалуйста какой редактор хороший для написания кода для php чтоб он переводил файлы в utf-8 ну и подсветка чтоб была или notepad ++ нормальный редактор?

Это сообщение отредактировал(а) sssssss7 - 25.8.2009, 23:02
PM MAIL   Вверх
unicross
Дата 25.8.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



А как все может быть нормально, если строка
Цитата(sssssss7 @  25.8.2009,  23:55 Найти цитируемый пост)
    $escape_name = mysql_real_escape_string($name);

расположена перед строкой
Цитата(sssssss7 @  25.8.2009,  23:55 Найти цитируемый пост)
    $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);  

? Функция mysql_real_escape_string() требует подключения к базе данных...
Цитата(sssssss7 @  25.8.2009,  23:55 Найти цитируемый пост)
или notepad ++ нормальный редактор?

 smile Лучше еще не нашел
Цитата
а где лишний код.. если мне надо раздельно записать дату и время и именно в таком формате?

IZ@TOP, прав! Для хранения даты и времени нужно использовать специальные форматы полей. И использовать специальные функции для вставки... А вот выводить можете в любом другом формате...
PM MAIL WWW   Вверх
Ипатьев
Дата 25.8.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



Мне кажется, автор не спрашивал, как ему поступить, а спрашивал, почему происходит описываемый эффект.
Каюсь, сам я жестоко протупил, и каким-то образом во второй команде увидел почему-то utf8. Отчего и удивился.

Собственно, вопроса два.
1. почему без set names получаются "иероглифы" (кстати, со всех бедолаг, пострадавших от кодировок, надо в обязательном порядке требовать пример этих "иероглифов". которые тут же скажут специалисту направление перекодировки)? Очень просто: с базой мы работаем по протоколу клиент-сервер. И хоть обвыставляйся на сервере, но клиент это не затронет никак. А если на клиенте кодировка не задана, то она выбирается по умолчанию, latin1.

2. почему не помогает set names utf8. Тут я могу только предположить, что страницы, на самом деле, не в ней, а в 1251



Это сообщение отредактировал(а) Ипатьев - 25.8.2009, 23:20
PM MAIL   Вверх
IZ@TOP
Дата 26.8.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Ипатьев, лучше сразу подсказать, что бы потом меньше вопросов было ;) Соответственно, меньше новых тем с глупыми вопросами  smile 
Ну и более того, понудеть никто ведь старикам не запретит?  smile

Добавлено через 2 минуты и 55 секунд
sssssss7, лишний код в присвоении даты переменным. Советую очень внимательно ознакомиться с разделом 11.6. Date and Time Functions.
Хороший редактор: Zend Studio 7, netBeans или аналогичные.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sssssss7
Дата 26.8.2009, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 3.2.2009

Репутация: нет
Всего: нет



Всем спасибо вроде как разобрался... и еще много полезного узнал.. учится и учится=).. IZ@TOP за прогу netBeans отдельное спасибо пока она лучшая. Zend Studio 7 что то навороченная слишком трудно разобратся. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.