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 :: Версия для печати :: Проблема с кодировкой utf 8
Форумы портала PHP.SU » PHP » Программирование на PHP » Проблема с кодировкой utf 8

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

1. borysnn - 01 Июня, 2010 - 20:18:56 - перейти к сообщению
история такая сайт был на денвере настроен на utf
все файлы делал в дримвивеере там тоже устанавливал utf
сервер удаленый тоже на utf
есть фаил html с формой которую обрабатыват php фаил и заносит коментарии в таблицу на удаленном севере и вновь возвращает html с внесенными данными

на локалке все работало

в html есть строка
CODE (html):
скопировать код в буфер обмена
  1.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2.  

в файле обработчике формы нет ничего про кодировку

результат когда обнавилась страница html текст был русский в коментариях но вместо буквы ш стоят вопросы

захожу на сервер в базу и смотрю как заносяться данные в таблицу - там одни вопросики и т.д.

пожалуйста помогите очень сложно сразу во всем разобраться - я только начинаю
2. Champion - 01 Июня, 2010 - 20:25:28 - перейти к сообщению
Кодировка соединения, кодировка таблицы, кодировка базы?
3. borysnn - 01 Июня, 2010 - 20:32:33 - перейти к сообщению
Champion пишет:
Кодировка соединения, кодировка таблицы, кодировка базы?


я так думаю что у меня нет кодировки соединения ??
потому что в таблице прописывал а базаа уже в utf8

как делать кодировку соединения и в каком файле ?? где форма для заполнения или в файле php который обрабатывает данные POST и заносит их в таблицу
4. altermann - 01 Июня, 2010 - 21:24:48 - перейти к сообщению
Я прописываю после установки соединения
PHP:
скопировать код в буфер обмена
  1. mysql_query ('SET NAMES utf8');
  2. mysql_query ('SET CHARACTER SET utf8');
5. borysnn - 01 Июня, 2010 - 22:06:51 - перейти к сообщению
altermann пишет:
Я прописываю после установки соединения
PHP:
скопировать код в буфер обмена
  1. mysql_query ('SET NAMES utf8');
  2. mysql_query ('SET CHARACTER SET utf8');


добавка этиз кодов не помогла
ошибка идет именно при запписи в таблицу базы данных
если вывести на экран данные поступившие через post формы в php код до вненсения в базу то все буквы хорошие после команды insert в таблице идет бардак ввиде ? и врякого того

а когда обнавляет страницу то вылитают буквы ш и еще некоторые
(Добавление)
привожу пример кода

фаил php соединения
PHP:
скопировать код в буфер обмена
  1. <?
  2. $db = mysql_connect ("localhost", "user", "12345");
  3. mysql_select_db ("koment", $db);
  4. mysql_query ('SET NAMES utf8');
  5. mysql_query ('SET CHARACTER SET utf8');
  6. ?>



фаил обработчик

PHP:
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <title>Документ без названия</title>
  7. </head>
  8.  
  9. <body>
  10. <?PHP
  11. include ("bd.php"); /*вставляем код из файла соединенияс базой*/
  12. if (isset ($_POST['auther']))
  13.         {$auther = $_POST['auther'];}
  14. if (isset ($_POST['komen']))
  15.         {$komen = $_POST['komen'];}
  16. if (isset ($_POST['pr']))
  17.         {$pr = $_POST['pr'];}                    
  18. if (isset ($_POST['sub_kom']))
  19.         {$sub_kom = $_POST['sub_kom'];}
  20. if (isset ($_POST['stat']))
  21.         {$stat = $_POST['stat'];}
  22.  
  23. if (isset ($sub_kom))/* проверяем факт перехода к фалу по кнопке отослать из файла со статьей*/
  24.         {
  25.         /*выполнение при условие что кнопку отправить исполнено*/
  26.         if (isset($auther)) /* если у нас существует переменная автор*/
  27.         {trim($auther);} /*тогда обрезаем пробелы до и после имя автора*/
  28.         else {$auther = "";} /*если автора не существует присваеваем переменой автор пустоту*/
  29.                 if (isset($komen)) {trim($komen);}
  30.                 else {$komen = "";}
  31.                
  32.                 if (empty ($auther) or empty ($komen)) /*если  переменная автор или переменная коментарии пусто то */
  33.                 {exit  ("<p>Вы ввели не всю информацию, вернитесь назад и заполните все поля. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:history.back();'></p>");  /*с помещением кнопки возвратат назад*/
  34.                 }
  35.                
  36.                 $auther = stripslashes ($auther); /*убераем все обратные слеши*/
  37.                 $komen = stripslashes ($komen);
  38.                 $auther = htmlspecialchars ($auther); /*убераем все html коды*/
  39.                 $komen = htmlspecialchars ($komen);
  40.                 $result = mysql_query ("SELECT sum FROM kom_set", $db);
  41.                 $myrow = mysql_fetch_array ($result) ;
  42.                 if ( $pr == $myrow ["sum"])
  43.                         {
  44.                 $data = date ("Y-m-d");
  45.                 $result2 = mysql_query ("INSERT INTO koment (stat,auther,komen,data) VALUES ('$stat', '$auther', '$komen', '$data')",$db);
  46.                 /*занесение в таблицу даных из формы*/
  47.                 $address = "b0104@rambler.ru";
  48.                 $subject = "Новый комментарий к заметке";
  49.                 $result3 = mysql_query ("SELECT fname FROM fale WHERE id='$stat'", $db);
  50.                 $myrow3 = mysql_fetch_array ($result3);
  51.                 $fname = $myrow3 ["fname"];
  52.                 $messege = "Появился комментарий к странице - " .$fname."\n
  53.                 Комментарий добавил (а): ".$auther." \n Текст комментария: ".$komen."\n Сылка на заметку http://localhost/tgraf/".$fname."";
  54.                 mail ($address, $subject, $messege, "Content-type: text/plain; Charset=utf8\r\n");
  55.                 echo "<html><head>
  56.                 <meta http-equiv='Refresh' content='0; url= ../$fname'>    <!--/*другой код url=view_post.php?id=$id*/-->
  57.                 </html></head>";
  58.                 exit ();
  59.                 }
  60.                 else
  61.                                 {
  62.                 exit  ("<p>Вы ввели неверную сумму с картинки на предыдущей странице. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:history.back();'></p>");  /*с помещением кнопки возвратат назад*/}
  63.                                
  64.         }
  65. ?>
  66. </body>
  67. </html>
  68.  
6. altermann - 01 Июня, 2010 - 22:54:54 - перейти к сообщению
В PHPMyAdmin при выборе БД показывается список таблиц, там есть колонка "Сравнение", какое значение в самой последней строке выделенной жирным?

Как вариант выполнить эти запросы через PHPMyAdmin:
CODE (SQL):
скопировать код в буфер обмена
  1. ALTER DATABASE `database` CHARACTER SET 'utf8';
  2. ALTER DATABASE `database` COLLATE 'utf8_general_ci';


Была у меня такая фигня, лечил каким-то запросом через PHPMyAdmin, но убейте не могу вспомнить каким Улыбка
7. borysnn - 02 Июня, 2010 - 07:39:51 - перейти к сообщению
как это выглядит на удаленном сервере из pphpmyadmin
8. altermann - 02 Июня, 2010 - 08:19:13 - перейти к сообщению
У тебя в последней строке в таблице на рисунке кодировка стоит windows1251.
9. borysnn - 02 Июня, 2010 - 08:19:23 - перейти к сообщению
страно не знаю от куда это там появилось но кадировка 1251 относилась к базе, а не к таблице, спасибо что заметили - я исправил,
но код кодподключения который ниже мне уже дал верный вариант до исправления - хотя изначально может быть ошибка была имено по причине не врного значения "сравнения" для базы



Решение вопроса найдено
фаил соединения должен был выглядить так
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $dbhost = "localhost";
  5. $dbname = "имя вашй базы";
  6. $dbuser = "имя пользователя";
  7. $dbpass = "пароль пользователя";
  8.  
  9.  
  10. $db = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
  11. mysql_query ("SET CHARACTER SET 'utf8'", $db);
  12. mysql_query ("set character_set_client='utf8'");
  13. mysql_query ("set character_set_results='utf8'");
  14. mysql_query ("set collation_connection='utf81_general_ci'");
  15. mysql_query ("SET NAMES utf8");
  16. mysql_select_db($dbname,$db) or die("Could not find db");
  17. if (!headers_sent())
  18. {
  19. };
  20. ?>
  21.  


покрайней мере мне помогло
(Добавление)
10. altermann - 02 Июня, 2010 - 11:44:51 - перейти к сообщению
Думаю что из-за неверного сравнения. У меня так один скрипт работал на локальной машине без проблем, но перенес на хостинг и начались "вопросики". Поиск проблемы привел к базе, потому что скрипты без изменений были скопированы на хостинг с локальной машины. Потом нашел в чем проблема была, именно в этом сравнении для БД, и исправлял запросом через PHPMyAdmin. А появляется она при создании базы, как я понял это в настройках хостинга у меня меняется.
11. JustUserR - 03 Июня, 2010 - 17:42:40 - перейти к сообщению
altermann пишет:
Как вариант выполнить эти запросы через PHPMyAdmin:
ALTER DATABASE `database` CHARACTER SET 'utf8';
ALTER DATABASE `database` COLLATE 'utf8_general_ci';
Была у меня такая фигня, лечил каким-то запросом через PHPMyAdmin, но убейте не могу вспомнить каким
При работе с кодировками на БД не все так просто поскольку изменение кодировки за счет явно перекодировки или за счет изменения трактования данной кодировки это разные вещи - ведь если данные из кодировки CP1251 были сохранены в UTF8 и трактовались таким образом то простая перекодировка пользы не даст - ведь ошибочные данные которые на самом деле в CP1251 будут трактованы как UTF8 и переведены в CP1251 в результате чего станут окончательно нечитаемыми - по этой причине в таком случае нужно менять только трактовку без перекодировки
12. Andrey123 - 28 Января, 2012 - 02:34:12 - перейти к сообщению
Не понял
Привет, у меня была такая же проблема, целый день сидел мучался с кодировкой.
Не на всех хостингах работало одиннаково.
В общем чтобы решить эту преблему с кодировкой. При написании скриптов лучше придерживаться следующих рекомендаций.

Я постарался их для вас написать тут

http://phpwebmaster[dot]ru/blogs/php/charset[dot]html


Надеюсь вам будет полезна данная информация.
13. Hachiro - 12 Июля, 2012 - 16:17:45 - перейти к сообщению
Народ помогите с кодом. У меня на сайте Ucoz проблема в новостях вставляю картинку но она не хочет вставляться в рамочку что делать вот код Вида материалов

<!--sssss-->
<div class="VMT">$TITLE$$MODER_PANEL$</div>
<div class="vidMatFon">
<div align="center">
<div class="imgVM">
<div class="wotermark"><img src="$OTHER1$"></div>
<img src="$IMG_URL1$" width="490px" height="130px">
<div class="VMDetal">
<b>Просмотров: $READS$ | Комментариев: $COMMENTS_NUM$</b>
</div>
</div><br>
<div style="margin-right:60px;">
$MESSAGE$
</div>
</div>
<div class="VMSee"><a href="$ENTRY_URL$"><img src="/WGStudio_pabl/imgs/VMSee.png"></a></div>
</div>
<div class="VMShaddow"></div>
<!--sssss-->​

 

Powered by ExBB FM 1.0 RC1