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
Форумы портала PHP.SU :: Версия для печати :: Проблемы с кодировками
Форумы портала PHP.SU » » Работа с СУБД » Проблемы с кодировками

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

1. snikers987 - 15 Марта, 2012 - 11:59:17 - перейти к сообщению
Довольно часто на форумах(не только на этом) задают подобный вопрос:
Цитата:
"Я написал скрипт, а вместо русских букв из базы данных вижу 'кракозябры'"

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

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

Данные действия нужно выполнить сразу после подключения к бд, при чем не оба, а один из вариантов.
Стоит отметить также, что документация php рекомендует второй.
Надеюсь понятно написал и информация будет полезна.
2. Maxi - 07 Мая, 2012 - 03:46:34 - перейти к сообщению
Хочу ещё добавить, если у вас заголовок
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> вот такой,
а кодировка самого файла вашего скрипта (index.php к примеру) в ANSI, то стоит преобразовать кодировку файла в utf-8, поможет в этом вам notepad++
3. Uchenik - 16 Мая, 2012 - 12:52:13 - перейти к сообщению
Maxi забыл добавить:
Для того чтобы скрипт уж точно ничего лишнего не выдавал, нужно использовать UFT-8 без BOM в том же notepad++ =)
4. LIME - 16 Мая, 2012 - 12:58:41 - перейти к сообщению
Maxi пишет:
если у вас заголовок
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> вот такой
но при этом приходит http заголовок с другим чарсетом, то браузер с удовольствием забьет на мета-тег
5. PVG - 26 Июля, 2012 - 21:48:09 - перейти к сообщению
Вот сделал вроде все как написано:
пхп файл:

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

Подскажите пожалуйста где ошибка?
6. LIME - 26 Июля, 2012 - 21:52:33 - перейти к сообщению
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;
7. PVG - 26 Июля, 2012 - 21:54:20 - перейти к сообщению
Спасибо, учтем)
8. LIME - 26 Июля, 2012 - 21:55:28 - перейти к сообщению
что тут учитывать
ошибка в этом наверняка
9. PVG - 26 Июля, 2012 - 22:28:58 - перейти к сообщению
Заменил строки, результат такой же.

А какая разница? Это просто запись в скрытую форму, просто так тупо написана. Ошибка ведь mysql'овская. Появилась только после того как кодировку добавил и стал вводить кириллические символы.

 

Powered by ExBB FM 1.0 RC1