Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблемы с кодировками

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: прочти, прежде чем задать вопрос
snikers987
Отправлено: 15 Марта, 2012 - 11:59:17
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Довольно часто на форумах(не только на этом) задают подобный вопрос:
Цитата:
"Я написал скрипт, а вместо русских букв из базы данных вижу 'кракозябры'"

Стоит сразу отметить, что все, в рамках одного проекта, должно быть в одной кодировке и тогда такого вопроса у Вас скорее всего не возникнет.
И так перейдем к самой проблеме.
Сама проблема возникает из-за разности кодировки базы данных и файла скрипта, если у Вас сравнение(кодировка) базы данных ,к примеру, windows-1251 , а фаил скрипта в utf8, то вполне естественно, что кириллических символов, в их нормальном виде, вы не увидите.
Для того чтобы выйти из сложившейся ситуации можно использовать следущие варианты:
0. После подключения к базе данных выполнить запрос:
PHP:
скопировать код в буфер обмена
  1. mysql_query('SET NAMES utf8'); //указывать тут нужно кодировку в которой сохранен фаил скрипта

1. Установить кодировку функцией, предусмотренной в ядре PHP
PHP:
скопировать код в буфер обмена
  1. mysql_set_charset('utf8'); //аналогично с предыдущим вариантом, тут нужно указать кодировку файла скрипта

Данные действия нужно выполнить сразу после подключения к бд, при чем не оба, а один из вариантов.
Стоит отметить также, что документация php рекомендует второй.
Надеюсь понятно написал и информация будет полезна.

(Отредактировано автором: 15 Марта, 2012 - 12:09:27)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Maxi
Отправлено: 07 Мая, 2012 - 03:46:34
Post Id



Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Июнь 2010  
Откуда: Kharkov, Ukraine


Помог: 0 раз(а)




Хочу ещё добавить, если у вас заголовок
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> вот такой,
а кодировка самого файла вашего скрипта (index.php к примеру) в ANSI, то стоит преобразовать кодировку файла в utf-8, поможет в этом вам notepad++
 
 Top
Uchenik
Отправлено: 16 Мая, 2012 - 12:52:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Maxi забыл добавить:
Для того чтобы скрипт уж точно ничего лишнего не выдавал, нужно использовать UFT-8 без BOM в том же notepad++ =)
 
 Top
LIME
Отправлено: 16 Мая, 2012 - 12:58:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Maxi пишет:
если у вас заголовок
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> вот такой
но при этом приходит http заголовок с другим чарсетом, то браузер с удовольствием забьет на мета-тег
 
 Top
PVG
Отправлено: 26 Июля, 2012 - 21:48:09
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Вот сделал вроде все как написано:
пхп файл:

PHP:
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <title>Учусь</title>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <style>
  7. </style>
  8. </head>
  9. <body>
  10. <?
  11. if (!empty($_POST['news_name']) && !empty($_POST['news_about']) && !empty($_POST['news_content']) && !empty($_POST['news_tags'])){
  12. if (!($db = mysql_connect('localhost', 'root', 'silvias15')))
  13.         {die ('Unable to connect. Check your connection parameters.');}
  14.     mysql_set_charset('utf-8');
  15.         if (!mysql_select_db('lesson', $db))
  16.         {die('Unable to select database.');}
  17.                                
  18. $news_name=$_POST['news_name'];  
  19. $news_about = $_POST['news_about'];
  20. $news_content = $_POST['news_content'];
  21. $news_tags = $_POST['news_tags'];
  22.     $query = "insert into news values(null, '$news_name', '$news_about', '$news_content', '$news_tags')";
  23.     mysql_query($query, $db) or die(mysql_error($db));
  24.  
  25.        
  26.        
  27. print <<<here
  28. <h1>Ваша новость была добавлена</h1>
  29. Для того, чтобы ее просмотреть, перейдите по ссылке:
  30. <a href="news_look.php">Ссылка на просмотр новости</a>
  31.  
  32. <input type="hidden" name="name" value="
  33. here;
  34. echo $_POST['news_name'];
  35.  echo  <<<here
  36. "/>
  37. here;
  38. }
  39. ?>
  40. </body>
  41. </html>
  42.  


В итоге получаю:

Incorrect string value: '\xE9\xF6\xF3' for column 'name' at row 1

Подскажите пожалуйста где ошибка?
 
 Top
LIME
Отправлено: 26 Июля, 2012 - 21:52:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PVG пишет:
<input type="hidden" name="name" value="
here;
echo $_POST['news_name'];
 echo  <<<here
"/>
here;
это что за дикая конструкция?
PHP:
скопировать код в буфер обмена
  1. <input type="hidden" name="name" value="{$_POST['news_name']}"/>
  2. here;
 
 Top
PVG
Отправлено: 26 Июля, 2012 - 21:54:20
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Спасибо, учтем)
 
 Top
LIME
Отправлено: 26 Июля, 2012 - 21:55:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




что тут учитывать
ошибка в этом наверняка
 
 Top
PVG
Отправлено: 26 Июля, 2012 - 22:28:58
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Заменил строки, результат такой же.

А какая разница? Это просто запись в скрытую форму, просто так тупо написана. Ошибка ведь mysql'овская. Появилась только после того как кодировку добавил и стал вводить кириллические символы.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB